Difference between revisions of "Team:NKU China"

 
(13 intermediate revisions by one other user not shown)
Line 5: Line 5:
 
     <!--separatrix-->
 
     <!--separatrix-->
 
     <link rel="stylesheet" href="https://2016.igem.org/Template:NKU_China/css/style?action=raw&ctype=text/css">
 
     <link rel="stylesheet" href="https://2016.igem.org/Template:NKU_China/css/style?action=raw&ctype=text/css">
 +
     
 
     <style>
 
     <style>
 
         .main#home {
 
         .main#home {
Line 67: Line 68:
  
 
         #project article {
 
         #project article {
             width: 30vw;
+
             width: 33vw;
 
         }
 
         }
  
Line 75: Line 76:
  
 
         #project > div:nth-child(2) {
 
         #project > div:nth-child(2) {
             width:50vw;
+
             width:47vw;
 
             margin-left:3vw;
 
             margin-left:3vw;
 
         }
 
         }
  
 
         #project .inline-accordion .ui-accordion-content {
 
         #project .inline-accordion .ui-accordion-content {
             height:11rem;
+
             height:13rem;
 +
            position:relative;
 +
            z-index:3;
 +
            background-color:transparent;
 
         }
 
         }
  
Line 150: Line 154:
 
             font-size:1.6rem;
 
             font-size:1.6rem;
 
             margin: 0.6rem 0;
 
             margin: 0.6rem 0;
        }
 
 
        #result #figure-wrapper figure figcaption .h4 {
 
            font-size:1.2rem;
 
            font-weight:normal;
 
 
         }
 
         }
 
     </style>
 
     </style>
Line 199: Line 198:
 
         }
 
         }
 
     </style>   
 
     </style>   
 +
    <style>
 +
        #wowslider-wrapper {
 +
            max-width:1280px;
 +
        }
 +
 +
        #wowslider-container1 {
 +
            /*height:100%;*/
 +
        }
 +
    </style>
 
     <script>
 
     <script>
 
         function window_resize() {
 
         function window_resize() {
Line 227: Line 235:
 
             adjust('#introduction-carousel', 16, 9);
 
             adjust('#introduction-carousel', 16, 9);
 
             adjust('#wowslider-wrapper', 4, 3);
 
             adjust('#wowslider-wrapper', 4, 3);
 +
           
 
         }
 
         }
 
     </script>
 
     </script>
Line 236: Line 245:
 
             $(window).resize(window_resize);
 
             $(window).resize(window_resize);
  
             //particles();
+
             //$('#particles-js').hide();
 
         })
 
         })
 
     </script>
 
     </script>
Line 242: Line 251:
 
<body>
 
<body>
 
     <div id="particles-js"></div>
 
     <div id="particles-js"></div>
     <script>
+
     <script src="https://2016.igem.org/Template:NKU_China/js/particlesJS?action=raw&ctype=text/javascript"></script>   
        particlesJS('particles-js',
+
  {
+
      "particles": {
+
          "number": {
+
              "value": 100,
+
              "density": {
+
                  "enable": true,
+
                  "value_area": 800
+
              }
+
          },
+
          "color": {
+
              "value": "#0ff"
+
          },
+
          "shape": {
+
              "type": "circle",
+
              "stroke": {
+
                  "width": 0,
+
                  "color": "#000000"
+
              },
+
              "polygon": {
+
                  "nb_sides": 5
+
              },
+
              "image": {
+
                  "src": "img/github.svg",
+
                  "width": 100,
+
                  "height": 100
+
              }
+
          },
+
          "opacity": {
+
              "value": 0.4,
+
              "random": false,
+
              "anim": {
+
                  "enable": false,
+
                  "speed": 1,
+
                  "opacity_min": 0,
+
                  "sync": false
+
              }
+
          },
+
          "size": {
+
              "value": 5,
+
              "random": true,
+
              "anim": {
+
                  "enable": false,
+
                  "speed": 40,
+
                  "size_min": 0,
+
                  "sync": false
+
              }
+
          },
+
          "line_linked": {
+
              "enable": true,
+
              "distance": 150,
+
              "color": "#ff0",
+
              "opacity": 0.4,
+
              "width": 1
+
          },
+
          "move": {
+
              "enable": true,
+
              "speed": 6,
+
              "direction": "none",
+
              "random": false,
+
              "straight": false,
+
              "out_mode": "out",
+
              "attract": {
+
                  "enable": true,
+
                  "rotateX": 600,
+
                  "rotateY": 1200
+
              }
+
          }
+
      },
+
      "interactivity": {
+
          "detect_on": "canvas",
+
          "events": {
+
              "onhover": {
+
                  "enable": true,
+
                  "mode": ["grab", "bubble"]
+
              },
+
              "onclick": {
+
                  "enable": true,
+
                  "mode": ["push", "repulse"]
+
              },
+
              "resize": true
+
          },
+
          "modes": {
+
              "grab": {
+
                  "distance": 100,
+
                  "line_linked": {
+
                      "opacity": 0.75
+
                  }
+
              },
+
              "bubble": {
+
                  "distance": 100,
+
                  "size": 4,
+
                  "duration": 2,
+
                  "opacity": 8,
+
                  "speed": 5
+
              },
+
              "repulse": {
+
                  "distance": 200
+
              },
+
              "push": {
+
                  "particles_nb": 4
+
              },
+
              "remove": {
+
                  "particles_nb": 2
+
              }
+
          }
+
      },
+
      "retina_detect": true,
+
      "config_demo": {
+
          "hide_card": false,
+
          "background_color": "#b61924",
+
          "background_image": "",
+
          "background_position": "50% 50%",
+
          "background_repeat": "no-repeat",
+
          "background_size": "cover"
+
      }
+
  }
+
 
+
);
+
    </script>   
+
 
     <div class="main" id="home">
 
     <div class="main" id="home">
 
         <div id="introduction-carousel" class="carousel slide" data-ride="carousel">
 
         <div id="introduction-carousel" class="carousel slide" data-ride="carousel">
Line 392: Line 281:
 
             </a>
 
             </a>
 
         </div>
 
         </div>
        <script>
 
            $('#introduction-carousel').carousel();
 
        </script>
 
 
         <section id="project">
 
         <section id="project">
 
             <article>
 
             <article>
Line 401: Line 287:
 
                 </div>
 
                 </div>
 
                 <div class="p">
 
                 <div class="p">
                     We are team of creative photographers. We passionate with photography and other creative things. If you are looking professional photography theme with endless possibilities, you come in right place. This template consist of well-organized layers. Tons of features waiting for you.
+
                     This summer, our team is aiming to engineer bacteria for supplement and absorption of autoinducer-2 in the natural environment. We mainly design two cell machines: AI-2 Supplier is the cell machine which can directly supply and enrich the AI-2 molecular level; AI-2 Consumer is another cell machine which can sense, absorb and degrade the AI-2 in the environment. By taking advantage of the special characteristics of AI-2 controllers, we hope to directly control the population behaviors of bacteria in group levels.
 
                 </div>
 
                 </div>
 
                 <div class="p">
 
                 <div class="p">
                     We are team of creative photographers. We passionate with photography and other creative things. If you are looking professional photography theme with endless possibilities, you come in right place.
+
                     What's more, biosafety is further taken into account in our project. By applying gene circuits to control essential gene expression under the assigned biocontainment conditions, we can blocks essential gene expression to kill the cell upon loss of the biocontainment signal.
 
                 </div>
 
                 </div>
 
             </article>
 
             </article>
 
             <div>
 
             <div>
 
                 <div class="h2">
 
                 <div class="h2">
                     Our Goals
+
                     Our goals
 
                 </div>
 
                 </div>
 
                 <div class="inline-accordion">
 
                 <div class="inline-accordion">
 
                     <div class="h3">
 
                     <div class="h3">
                         IMPRESSIVE TEMPLATE
+
                         AI-2 Supplier
 
                     </div>
 
                     </div>
 
                     <div class="p">
 
                     <div class="p">
                         Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch.
+
                         To enrich the AI-2 concentration in the nature or artificial environment, we constructed two AI-2 Supplier Devices by overexpression of the components responsible for AI-2 production (<i>luxS</i>, <i>mtn</i>).
 
                     </div>
 
                     </div>
 
                     <div class="h3">
 
                     <div class="h3">
                         TONS OF FEATURES
+
                         AI-2 Consumer
 
                     </div>
 
                     </div>
 
                     <div class="p">
 
                     <div class="p">
                         Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch.
+
                         To 'quench' AI-2 signal in the nature or artificial environment, we constructed six AI-2 Consumer Devices by overexpression the components responsible for AI-2 uptake(<i>lsrACDB</i>), phosphorylation(<i>lsrK</i>) and degradation (<i>lsrFG</i>).
 
                     </div>
 
                     </div>
 
                     <div class="h3">
 
                     <div class="h3">
                         CREATIVE LAYOUT
+
                         AI-2 Response Device
 
                     </div>
 
                     </div>
 
                     <div class="p">
 
                     <div class="p">
                         Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch.
+
                         We successfully constructed two devices that could respond to AI-2 by producing GFP, to provide an independent means to use AI-2 Controller to alter heterologous gene expression. we show that a 1:1 mixture of AI-2 Response Device with AI-2 suppliers activated QS-activated GFP expression from the control group. And 1:1 mixture of AI-2 Response Device with AI-2 consumers could significantly depress QS-activated gene expression from the control cells.
 +
                    </div>
 +
                    <div class="h3">
 +
                        Biosafety Considerations
 +
                    </div>
 +
                    <div class="p">
 +
                        This summer, we plan to <i>mf</i>-lon ssrA tag into 5 essential genes by using CRIPSR/Cas9 technology. By applying gene circuits to control <i>mf</i>-lon protease expression under the assigned biocontainment conditions, we can blocks essential gene expression to kill the cell upon loss of the biocontainment signal.
 
                     </div>
 
                     </div>
 
                 </div>
 
                 </div>
Line 441: Line 333:
 
         <section id="result">
 
         <section id="result">
 
             <div class="h2">
 
             <div class="h2">
                 Owesome Experiment Results
+
                 Demonstration of Experiment Results
 
             </div>
 
             </div>
 
             <div class="p">
 
             <div class="p">
                 We are team of creative photographers. We passionate with photography and other creative things. If you are looking professional photography theme with endless possibilities, you come in right place. This template consist of well-organized layers. Tons of features waiting for you.
+
                 We demonstrate utility of AI-2 Controllers by modulating naturally occurring processes of biofilm formation. We envision that ‘controller cells’ that modulate bacterial behavior by manipulating molecular communication, will find use in a variety of applications, particularly those employing natural or synthetic bacterial consortia.
 +
 
 
             </div>
 
             </div>
 
             <div id="figure-wrapper">
 
             <div id="figure-wrapper">
Line 451: Line 344:
 
                     <figcaption>
 
                     <figcaption>
 
                         <div class="h3">
 
                         <div class="h3">
                             John Doe
+
                             AI-2 Controllers Characterization
                        </div>
+
                        <div class="h4">
+
                            Graphic Designer
+
 
                         </div>
 
                         </div>
 
                     </figcaption>
 
                     </figcaption>
Line 462: Line 352:
 
                     <figcaption>
 
                     <figcaption>
 
                         <div class="h3">
 
                         <div class="h3">
                             John Doe
+
                             AI-2 Controllers &amp; AI-2 Response Devices
                        </div>
+
                        <div class="h4">
+
                            Graphic Designer
+
 
                         </div>
 
                         </div>
 
                     </figcaption>
 
                     </figcaption>
Line 473: Line 360:
 
                     <figcaption>
 
                     <figcaption>
 
                         <div class="h3">
 
                         <div class="h3">
                             John Doe
+
                             AI-2 Controllers &amp; Biofilm Formation
                        </div>
+
                        <div class="h4">
+
                            Graphic Designer
+
 
                         </div>
 
                         </div>
 
                     </figcaption>
 
                     </figcaption>
Line 486: Line 370:
 
             <div>
 
             <div>
 
                 <div class="h2">
 
                 <div class="h2">
                     HP
+
                     HUMAN PRACTICE
 
                 </div>
 
                 </div>
 
                 <div class="p">
 
                 <div class="p">
Line 497: Line 381:
 
                 <img src="https://static.igem.org/mediawiki/2016/5/5c/T--NKU_China--Main-Page-HP-3.jpg">
 
                 <img src="https://static.igem.org/mediawiki/2016/5/5c/T--NKU_China--Main-Page-HP-3.jpg">
 
                 <img src="https://static.igem.org/mediawiki/2016/b/b3/T--NKU_China--Main-Page-HP-4.jpg">
 
                 <img src="https://static.igem.org/mediawiki/2016/b/b3/T--NKU_China--Main-Page-HP-4.jpg">
                 <img src="https://static.igem.org/mediawiki/2016/6/69/T--NKU_China--Main-Page-HP-1.jpg">
+
                 <img src="https://static.igem.org/mediawiki/2016/8/82/T--NKU_China--Main-Page-HP-5.jpg">
                 <img src="https://static.igem.org/mediawiki/2016/f/f9/T--NKU_China--Main-Page-HP-2.jpg">
+
                 <img src="https://static.igem.org/mediawiki/2016/3/3c/T--NKU_China--Main-Page-HP-6.jpg">
                 <img src="https://static.igem.org/mediawiki/2016/5/5c/T--NKU_China--Main-Page-HP-3.jpg">
+
                 <img src="https://static.igem.org/mediawiki/2016/6/6b/T--NKU_China--Main-Page-HP-7.jpg">
                 <img src="https://static.igem.org/mediawiki/2016/b/b3/T--NKU_China--Main-Page-HP-4.jpg">
+
                 <img src="https://static.igem.org/mediawiki/2016/7/70/T--NKU_China--Main-Page-HP-8.jpg">
 
             </div>
 
             </div>
 
         </section>
 
         </section>
 
         <section id="wowslider-wrapper">
 
         <section id="wowslider-wrapper">
 
             <div id="wowslider-container1">
 
             <div id="wowslider-container1">
 +
               
 
                 <div class="ws_images">
 
                 <div class="ws_images">
 
                     <ul>
 
                     <ul>
                         <li><img src="https://static.igem.org/mediawiki/2016/5/56/T--NKU_China--1000-750-dailiangti.jpg" title="Liangti Dai" id="wows1_0" /></li>
+
                        <li><img src="https://static.igem.org/mediawiki/2016/a/ad/T--NKU_China--1000-750-chenlingyi.jpg" title="chenlingyi" id="wows1_0" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/7/7a/T--NKU_China--1000-750-dongzhuoer-4-3.jpg" title="Zhuoer Dong" id="wows1_1" /></li>                
+
                        <li><img src="https://static.igem.org/mediawiki/2016/e/ed/T--NKU_China--1000-750-chenchen.jpg" title="Chen Chen" id="wows1_1" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/c/cc/T--NKU_China--1000-750-liuxiao-4-3.jpg" title="Liu Xiao" id="wows1_2" /></li>
+
                         <li><img src="https://static.igem.org/mediawiki/2016/5/56/T--NKU_China--1000-750-dailiangti.jpg" title="Liangti Dai" id="wows1_2" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/4/47/T--NKU_China--1000-750-mengfankang.jpg" title="Fankang Meng" id="wows1_3" /></li>
+
                        <li><img src="https://static.igem.org/mediawiki/2016/7/70/T--NKU_China--1000-750-dongjingzhe.jpg" title="Jingzhe Dong" id="wows1_3" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/6/60/T--NKU_China--1000-750-qiaomingqiang-4-3.jpg" title="Mingqiang Qiao" id="wows1_4" /></li>
+
                         <li><img src="https://static.igem.org/mediawiki/2016/7/7a/T--NKU_China--1000-750-dongzhuoer-4-3.jpg" title="Zhuoer Dong" id="wows1_4" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/b/b3/T--NKU_China--1000-750-maxinyu.jpg" title="Xinyu Ma" id="wows1_5" /></li>
+
                        <li><img src="https://static.igem.org/mediawiki/2016/7/76/T--NKU_China--1000-750-kongannie-4-3.jpg" title="Annie Kong" id="wows1_5" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/b/b2/T--NKU_China--1000-750-songcunjiang-4-3.png" title="Cunjiang Song" id="wows1_6" /></li>
+
                         <li><img src="https://static.igem.org/mediawiki/2016/c/cc/T--NKU_China--1000-750-liuxiao-4-3.jpg" title="Liu Xiao" id="wows1_6" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/d/de/T--NKU_China--1000-750-songxinghao.jpg" title="Xinhao Song" id="wows1_7" /></li>
+
                        <li><img src="https://static.igem.org/mediawiki/2016/9/99/T--NKU_China--1000-750-maojiwei-4-3.jpg" title="Jiwei Mao" id="wows1_7" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/f/fd/T--NKU_China--1000-750-whole-group-4-3.png" title="Team" id="wows1_8" /></li>
+
                         <li><img src="https://static.igem.org/mediawiki/2016/4/47/T--NKU_China--1000-750-mengfankang.jpg" title="Fankang Meng" id="wows1_8" /></li>
                         <li><img src="https://static.igem.org/mediawiki/2016/0/09/T--NKU_China--1000-750-zhaoxianglin.jpg" title="Hanchenxi Zhang" id="wows1_9" /></li>
+
                         <li><img src="https://static.igem.org/mediawiki/2016/6/60/T--NKU_China--1000-750-qiaomingqiang-4-3.jpg" title="Mingqiang Qiao" id="wows1_9" /></li>
 +
                         <li><img src="https://static.igem.org/mediawiki/2016/b/b3/T--NKU_China--1000-750-maxinyu.jpg" title="Xinyu Ma" id="wows1_10" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/1/15/T--NKU_China--1000-750-shifuchen.jpg" title="Fuchen Shi" id="wows1_11" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/c/ca/T--NKU_China--1000-750-shenghaocheng.jpg" title="Haosheng Shen" id="wows1_12" /></li>
 +
                         <li><img src="https://static.igem.org/mediawiki/2016/b/b2/T--NKU_China--1000-750-songcunjiang-4-3.png" title="Cunjiang Song" id="wows1_13" /></li>
 +
                         <li><img src="https://static.igem.org/mediawiki/2016/d/de/T--NKU_China--1000-750-songxinghao.jpg" title="Xinhao Song" id="wows1_14" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/2/2f/T--NKU_China--1000-750-keziying.jpg" title="Ziying Ke" id="wows1_15" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/a/a9/T--NKU_China--1000-750-tianruilin-4-3.jpg" title="Ruilin Tian" id="wows1_16" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/1/14/T--NKU_China--1000-750-wangxiangxiang.jpg" title="Xiangxiang Wang" id="wows1_17" /></li>
 +
                         <li><img src="https://static.igem.org/mediawiki/2016/f/fd/T--NKU_China--1000-750-whole-group-4-3.png" title="Team" id="wows1_18" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/6/6e/T--NKU_China--1000-750-xiongyuxiu-4-3.png" title="Yuxiu Xiong" id="wows1_19" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/2/23/T--NKU_China--1000-750-zhanghanchenxi.jpg" title="Hanchenxi Zhang" id="wows1_20" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/f/f3/T--NKU_China--1000-750-zhangmengxian.jpg" title="Mengxian Zhang" id="wows1_21" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/4/4a/T--NKU_China--1000-750-zhangzhaoran-4-3.jpg" title="Zhaoran Zhang" id="wows1_22" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/3/39/T--NKU_China--1000-750-zhaokun.jpg" title="Kun Zhao" id="wows1_23" /></li>
 +
                         <li><img src="https://static.igem.org/mediawiki/2016/0/09/T--NKU_China--1000-750-zhaoxianglin.jpg" title="Hanchenxi Zhang" id="wows1_24" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/d/df/T--NKU_China--1000-750-zhaoyujie.jpg" title="Yujie Zhao" id="wows1_25" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/e/e0/T--NKU_China--1000-750-zhoujindi.jpg" title="Jindi Zhou" id="wows1_26" /></li>
 +
                        <li><img src="https://static.igem.org/mediawiki/2016/0/07/T--NKU_China--1000-750-zhouhang-4-3.jpg" title="Hang Zhou" id="wows1_27" /></li>
 
                     </ul>
 
                     </ul>
 
                 </div>
 
                 </div>
 
                 <div class="ws_bullets">
 
                 <div class="ws_bullets">
 
                     <div>
 
                     <div>
                         <a href="#" title="Liangti Dai"><span>1</span></a>
+
                        <a href="#" title="chenlingyi"><span>1</span></a>
                         <a href="#" title="Zhuoer Dong"><span>2</span></a>
+
                        <a href="#" title="Chen Chen"><span>2</span></a>
                         <a href="#" title="Liu Xiao"><span>3</span></a>
+
                         <a href="#" title="Liangti Dai"><span>3</span></a>
                         <a href="#" title="Fankang Meng"><span>4</span></a>
+
                        <a href="#" title="Jingzhe Dong"><span>4</span></a>
                         <a href="#" title="Mingqiang Qiao"><span>5</span></a>
+
                         <a href="#" title="Zhuoer Dong"><span>5</span></a>
                         <a href="#" title="Xinyu Ma"><span>6</span></a>
+
                        <a href="#" title="Annie Kong"><span>6</span></a>
                         <a href="#" title="Cunjiang Song"><span>7</span></a>
+
                         <a href="#" title="Liu Xiao"><span>7</span></a>
                         <a href="#" title="Xinhao Song"><span>8</span></a>
+
                        <a href="#" title="Jiwei Mao"><span>8</span></a>
                         <a href="#" title="Team"><span>9</span></a>
+
                         <a href="#" title="Fankang Meng"><span>9</span></a>
                         <a href="#" title="Xianglin Zhao"><span>10</span></a>
+
                         <a href="#" title="Mingqiang Qiao"><span>10</span></a>
 +
                         <a href="#" title="Xinyu Ma"><span>11</span></a>
 +
                        <a href="#" title="Fuchen Shi"><span>12</span></a>
 +
                        <a href="#" title="Haosheng Shen"><span>13</span></a>
 +
                         <a href="#" title="Cunjiang Song"><span>14</span></a>
 +
                         <a href="#" title="Xinhao Song"><span>15</span></a>
 +
                        <a href="#" title="Ziying Ke"><span>16</span></a>
 +
                        <a href="#" title="Ruilin Tian"><span>17</span></a>
 +
                        <a href="#" title="Xiangxiang Wang"><span>18</span></a>
 +
                         <a href="#" title="Team"><span>19</span></a>
 +
                         <a href="#" title="Yuxiu Xiong"><span>20</span></a>
 +
                        <a href="#" title="Hanchenxi Zhang"><span>21</span></a>
 +
                        <a href="#" title="Mengxian Zhang"><span>22</span></a>
 +
                        <a href="#" title="Zhaoran Zhang"><span>23</span></a>
 +
                        <a href="#" title="Kun Zhao"><span>24</span></a>
 +
                        <a href="#" title="Hanchenxi Zhang"><span>25</span></a>
 +
                        <a href="#" title="Yujie Zhao"><span>26</span></a>
 +
                        <a href="#" title="Jindi Zhou"><span>27</span></a>
 +
                        <a href="#" title="Hang Zhou"><span>28</span></a>
 
                     </div>
 
                     </div>
 
                 </div>
 
                 </div>
                <div class="ws_shadow"></div>
 
 
             </div>
 
             </div>
             <script type="text/javascript" src="https://2016.igem.org/Template:NKU_China/js/wowslider?action=raw&ctype=text/javascript"></script>
+
             <script src="https://2016.igem.org/Template:NKU_China/js/wowslider?action=raw&ctype=text/javascript"></script>
             <script type="text/javascript" src=""></script>
+
             <script src="https://2016.igem.org/Template:NKU_China/js/script?action=raw&ctype=text/javascript" ></script>
            <script type="text/javascript" src=""></script>
+
                   
            <script type="text/javascript" src=""></script>
+
        </section>
            <script type="text/javascript" src=""></script>
+
            <script type="text/javascript" src=""></script>
+
            <script type="text/javascript" src=""></script>
+
            <script type="text/javascript" src="data:text/javascript;base64,Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gaHR0cDovL3dvd3NsaWRlci5jb20vCi8vIEphdmFTY3JpcHQgV293IFNsaWRlciBpcyBhIGZyZWUgc29mdHdhcmUgdGhhdCBoZWxwcyB5b3UgZWFzaWx5IGdlbmVyYXRlIGRlbGljaW91cyAKLy8gc2xpZGVzaG93cyB3aXRoIGdvcmdlb3VzIHRyYW5zaXRpb24gZWZmZWN0cywgaW4gYSBmZXcgY2xpY2tzIHdpdGhvdXQgd3JpdGluZyBhIHNpbmdsZSBsaW5lIG9mIGNvZGUuCi8vIEdlbmVyYXRlZCBieSBXT1cgU2xpZGVyIDguNwovLwovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vIE9iZnVzY2F0ZWQgYnkgSmF2YXNjcmlwdCBPYmZ1c2NhdG9yCi8vIGh0dHA6Ly9qYXZhc2NyaXB0LXNvdXJjZS5jb20KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpqUXVlcnkuZXh0ZW5kKGpRdWVyeS5lYXNpbmcse2Vhc2VJbkJhY2s6ZnVuY3Rpb24oZSxmLGEsaSxoLGcpe2lmKGc9PXVuZGVmaW5lZCl7Zz0xLjcwMTU4fXJldHVybiBpKihmLz1oKSpmKigoZysxKSpmLWcpK2F9LGVhc2VPdXRCYWNrOmZ1bmN0aW9uKGUsZixhLGksaCxnKXtpZihnPT11bmRlZmluZWQpe2c9MS43MDE1OH1yZXR1cm4gaSooKGY9Zi9oLTEpKmYqKChnKzEpKmYrZykrMSkrYX0sZWFzZUluQmFja1E6ZnVuY3Rpb24oZSxmLGEsaixpLGcpe3ZhciBoPShmLz1pKSpmO3JldHVybiBhK2oqaCooNCpmKmgtOCpoKzgqZi0zKX0sZWFzZU91dEJhY2tROmZ1bmN0aW9uKGUsZixhLGosaSxnKXt2YXIgaD0oZi89aSkqZjtyZXR1cm4gYStqKig0KmgqZipoLTEyKmgqaCsxNipoKmYtMTMqaCs2KmYpfSxlYXNlSW5CYWNrUTI6ZnVuY3Rpb24oZSxmLGEsaixpLGcpe3ZhciBoPShmLz1pKSpmO3JldHVybiBhK2oqaCooMS41KmYqaC0yLjUqaCs1KmYtMyl9LGVhc2VPdXRCYWNrUTI6ZnVuY3Rpb24oZSxmLGEsaixpLGcpe3ZhciBoPShmLz1pKSpmO3JldHVybiBhK2oqKDEuNSpoKmYqaC01KmgqaCsxMCpoKmYtMTIqaCs2LjUqZil9fSk7ZnVuY3Rpb24gd3NfbG91dmVycyhmLHEsZyl7dmFyIGg9alF1ZXJ5LG09aCh0aGlzKSxhPWYuY29sc3x8MTAsRj0yLjUsYz0yLHQ9Zi5wZXJzcGVjdGl2ZXx8MjAwMCxzPWcuZmluZCgiLndzX2xpc3QiKSxFPVtdLGI9NSx2PXt9LG49aCgiPGRpdj4iKS5hZGRDbGFzcygid3NfZWZmZWN0IHdzX2xvdXZlcnMiKS5hcHBlbmRUbyhnKSxwPWYuc3VwcG9ydC50cmFuc2Zvcm0mJmYuc3VwcG9ydC50cmFuc2l0aW9uJiZmLnN1cHBvcnQucGVyc3BlY3RpdmUsbz0vU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhL0Nocm9tZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIS9XT1cgU2xpZGVyL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTt2YXIgdz1bXTtuLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsd2lkdGg6Zy53aWR0aCgpLGhlaWdodDpnLmhlaWdodCgpLHRyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwwLDApIix0cmFuc2Zvcm1PcmlnaW46KGYud2lkdGgvMikrInB4ICIrKGYuaGVpZ2h0LzIpKyJweCAwIixwZXJzcGVjdGl2ZTp0KzIwMDB9KS5oaWRlKCk7Zm9yKHZhciBsPTA7bDxhO2wrKyl7dmFyIHo9bCVhLHk9TWF0aC5mbG9vcihsL2EpO3ZhciBDPWgoIjxkaXY+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6MTAwKnovYSsiJSIsdG9wOjAsb3V0bGluZToiMXB4IHNvbGlkIHRyYW5zcGFyZW50Iix0cmFuc2Zvcm1TdHlsZTpvPyJmbGF0IjoicHJlc2VydmUtM2QiLG92ZXJmbG93OnA/InZpc2libGUiOiJoaWRkZW4ifSkuYXBwZW5kVG8obikseD1oKCI8ZGl2PiIpLmNzcyh7dHJhbnNmb3JtOiJzY2FsZSgxKSByb3RhdGVYKDApIHJvdGF0ZVkoMCkgdHJhbnNsYXRlM2QoMCwwLDApIixvdXRsaW5lOiIxcHggc29saWQgdHJhbnNwYXJlbnQiLHRyYW5zZm9ybVN0eWxlOiJwcmVzZXJ2ZS0zZCJ9KS5hcHBlbmRUbyhDKSx1PWgoIjxkaXY+IikuYWRkQ2xhc3MoIndzX2Zyb250X2ltYWdlIikuYXBwZW5kVG8oeCksQj1wP2goIjxkaXY+IikuYWRkQ2xhc3MoIndzX2JhY2tfaW1hZ2UiKS5hcHBlbmRUbyh4KTowO3UuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIix0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDAsMCwwKSJ9KS5hcHBlbmQoaCgiPGltZz4iKS5jc3Moe2xlZnQ6LXoqMTAwKyIlIix0b3A6LXkqMTAwKyIlIixwb3NpdGlvbjoiYWJzb2x1dGUiLG91dGxpbmU6IjFweCBzb2xpZCB0cmFuc3BhcmVudCJ9KSk7aWYocCl7Qi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4iLHRyYW5zZm9ybToicm90YXRlWSgxODBkZWcpIHRyYW5zbGF0ZTNkKDAsMCwiK2IrInB4KSJ9KS5hcHBlbmQoaCgiPGltZz4iKS5jc3Moe2xlZnQ6LXoqMTAwKyIlIix0b3A6LXkqMTAwKyIlIixwb3NpdGlvbjoiYWJzb2x1dGUiLG91dGxpbmU6IjFweCBzb2xpZCB0cmFuc3BhcmVudCJ9KSl9dmFyIHI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsb3V0bGluZToiMXB4IHNvbGlkIHRyYW5zcGFyZW50In07RVtsXT17cGFydDp4LGZyb250OnUsYmFjazpCLHdyYXBwZXI6QyxsZWZ0RWRnZTpwP2goIjxkaXY+IikuYWRkQ2xhc3MoIndzX2xlZnRfZWRnZSIpLmNzcyhyKS5hcHBlbmRUbyh4KTowLHJpZ2h0RWRnZTpwP2goIjxkaXY+IikuYWRkQ2xhc3MoIndzX3JpZ2h0X2VkZ2UiKS5jc3MocikuYXBwZW5kVG8oeCk6MCx0b3BFZGdlOnA/aCgiPGRpdj4iKS5hZGRDbGFzcygid3NfdG9wX2VkZ2UiKS5jc3MocikuYXBwZW5kVG8oeCk6MCxib3R0b21FZGdlOnA/aCgiPGRpdj4iKS5hZGRDbGFzcygid3NfYm90dG9tX2VkZ2UiKS5jc3MocikuYXBwZW5kVG8oeCk6MH19ZnVuY3Rpb24gQShMKXt2YXIgSD17fSxKPXEuZ2V0KEwpLE09Zi53aWR0aC9hLE49Zi5oZWlnaHQ7Zm9yKHZhciBJPTA7STxhO0krKyl7dmFyIEw9SSVhLEs9TWF0aC5mbG9vcihJL2EpO0hbSV09RChKLHt4OkwqTSx5OksqTix3Ok0saDpOfSl9cmV0dXJuIEh9ZnVuY3Rpb24gRyhILEssaixJLEope2Zvcih2YXIgaSBpbiBLKXtpZih0eXBlb2YgRVtpXSE9PSJmdW5jdGlvbiIpe0tbaV0udG9wRWRnZS5jc3Moe3dpZHRoOkksaGVpZ2h0OkgsYmFja2dyb3VuZDpqW2ldLHRyYW5zZm9ybToicm90YXRlWCg5MGRlZykgdHJhbnNsYXRlM2QoMCwtIitILzIrInB4LCIrSC8yKyJweCkifSk7S1tpXS5ib3R0b21FZGdlLmNzcyh7d2lkdGg6SSxoZWlnaHQ6SCxiYWNrZ3JvdW5kOmpbaV0sdHJhbnNmb3JtOiJyb3RhdGVYKDkwZGVnKSB0cmFuc2xhdGUzZCgwLC0iK0gvMisicHgsIisoLUorSC8yKSsicHgpIn0pO0tbaV0ubGVmdEVkZ2UuY3NzKHt3aWR0aDpILGhlaWdodDpKLGJhY2tncm91bmQ6altpXSx0cmFuc2Zvcm06InJvdGF0ZVkoOTBkZWcpIHRyYW5zbGF0ZTNkKCIrSC8yKyJweCwwLC0iK0gvMisicHgpIn0pO0tbaV0ucmlnaHRFZGdlLmNzcyh7d2lkdGg6SCxoZWlnaHQ6SixiYWNrZ3JvdW5kOmpbaV0sdHJhbnNmb3JtOiJyb3RhdGVZKDkwZGVnKSB0cmFuc2xhdGUzZCgiK0gvMisicHgsMCwiKyhJLUgvMikrInB4KSJ9KX19fWZ1bmN0aW9uIGUoSCxJKXt2YXIgaT0wO2Zvcih2YXIgaiBpbiBIKXtpZih0eXBlb2YgSFtqXSE9PSJmdW5jdGlvbiIpeyhmdW5jdGlvbihKLEspe3dvd0FuaW1hdGUoZnVuY3Rpb24oTSl7dmFyIFMsUSxSLFA9IiIsTD17fTtpZihNPD0wLjUpe1M9aC5lYXNpbmcuZWFzZUluQmFjaygxLE0qMiwwLDEsMSwxKS50b0ZpeGVkKDMpO1E9aC5lYXNpbmcuZWFzZUluQmFja1EoMSxNKjIsMCwxLDEsMSkudG9GaXhlZCgzKTtSPWguZWFzaW5nLmVhc2VJbkJhY2tRMigxLE0qMiwwLDEsMSwxKS50b0ZpeGVkKDMpO0tbSl0uYmFjay5jc3MoImJhY2tmYWNlVmlzaWJpbGl0eSIsImhpZGRlbiIpfWVsc2V7Uz1oLmVhc2luZy5lYXNlT3V0QmFjaygxLChNLTAuNSkqMiwwLDEsMSwxKS50b0ZpeGVkKDMpO1E9aC5lYXNpbmcuZWFzZU91dEJhY2tRKDEsKE0tMC41KSoyLDAsMSwxLDEpLnRvRml4ZWQoMyk7Uj1oLmVhc2luZy5lYXNlT3V0QmFja1EyKDEsKE0tMC41KSoyLDAsMSwxLDEpLnRvRml4ZWQoMyk7S1tKXS5iYWNrLmNzcygiYmFja2ZhY2VWaXNpYmlsaXR5IiwidmlzaWJsZSIpfWZvcih2YXIgTiBpbiBLW0pdLmFuaW1hdGVbTTw9MC41PyJoYWxmIjoiZW5kIl0pe3ZhciBUPUtbSl0uYW5pbWF0ZVtNPD0wLjU/ImJlZ2luIjoiaGFsZiJdW05dfHwwLE89S1tKXS5hbmltYXRlW008PTAuNT8iaGFsZiI6ImVuZCJdW05dfHwwO2lmKHR5cGVvZiBPIT09Im9iamVjdCIpe2lmKE49PT0ic2NhbGUifHxOPT09InJvdGF0ZVgifHxOPT09InJvdGF0ZVkiKXtPPVQrKE8tVCkqUX1lbHNle2lmKE49PT0ibGVmdCJ8fE49PT0idG9wIil7Tz1UKyhPLVQpKlJ9ZWxzZXtPPVQrKE8tVCkqU319fWlmKE49PT0icm90YXRlWCJ8fE49PT0icm90YXRlWSJ8fE49PT0icm90YXRlWiIpe1ArPU4rIigiK08rImRlZykgIn1lbHNle2lmKE49PT0ic2NhbGUiKXtQKz1OKyIoIitPKyIpICJ9ZWxzZXtpZihOPT09InRyYW5zbGF0ZTNkIil7UCs9TisiKCIrKFRbMF0rKE9bMF0tVFswXSkqUykudG9GaXhlZCgzKSsicHgsIisoVFsxXSsoT1sxXS1UWzFdKSpTKS50b0ZpeGVkKDMpKyJweCwiKyhUWzJdKyhPWzJdLVRbMl0pKlMpLnRvRml4ZWQoMykrInB4KSAifWVsc2V7TFtOXT1PfX19fUtbSl0ud3JhcHBlci5jc3Moe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoIisoTC5sZWZ0P0wubGVmdDowKS50b0ZpeGVkKDMpKyJweCwiKyhMLnRvcD9MLnRvcDowKS50b0ZpeGVkKDMpKyJweCwwKSJ9KTtkZWxldGUgTC5sZWZ0O2RlbGV0ZSBMLnRvcDtpZihQKXtMLnRyYW5zZm9ybT1QfUtbSl0ucGFydC5jc3MoTCl9LDAsMSxLW0pdLmFuaW1hdGUuZHVyYXRpb24sS1tKXS5hbmltYXRlLmRlbGF5LGZ1bmN0aW9uKCl7aSsrO2lmKGk9PUsubGVuZ3RoJiZJKXtJKCl9fSl9KGosSCkpfX19ZnVuY3Rpb24gayhZLEssTCxOKXt2YXIgVj1nLndpZHRoKCksVT1nLmhlaWdodCgpLFQ9Vi9hLFM9VSxKPShmLmR1cmF0aW9uKjAuNCk+MTAwMD8xMDAwOihmLmR1cmF0aW9uKjAuNCksST1mLmR1cmF0aW9uKjAuNixPPVswLDBdO0coYixZLHZbS10sVCxTKTtuLmNzcyh7dHJhbnNmb3JtT3JpZ2luOihWLzIpKyJweCAiKyhVLzIpKyJweCAwIix3aWR0aDpWLGhlaWdodDpVfSk7Zm9yKHZhciBRIGluIFkpe2lmKHR5cGVvZiBZW1FdIT09ImZ1bmN0aW9uIil7dmFyIEg9d1tRXS5kZWxheSpKO2lmKE9bMV08PUgpe09bMF09UTtPWzFdPUh9WVtRXS5wYXJ0WzBdLndzX2RlbGF5PVtILDBdfX1ZW09bMF1dLnBhcnRbMF0ud3NfZGVsYXlbMV09MTtmb3IodmFyIFEgaW4gWSl7aWYodHlwZW9mIFlbUV0hPT0iZnVuY3Rpb24iKXt2YXIgUD1ZW1FdLFg9USVhLFc9TWF0aC5mbG9vcihRL2EpLFI9VipYL2EsTT1VKlc7UC5hbmltYXRlPXtkZWxheTpQLnBhcnRbMF0ud3NfZGVsYXlbMF0sZHVyYXRpb246SSxiZWdpbjp7bGVmdDowLHRvcDowLHdpZHRoOlQsaGVpZ2h0OlMsc2NhbGU6MSxyb3RhdGVYOjAscm90YXRlWTowLHRyYW5zbGF0ZTNkOlswLDAsbz9iOjBdfSxoYWxmOntsZWZ0OndbUV0uaGFsZkxlZnQqVCx0b3A6d1tRXS5oYWxmVG9wKlMsc2NhbGU6d1tRXS5oYWxmU2NhbGUscm90YXRlWDp3W1FdLnJvdGF0ZVgvMixyb3RhdGVZOndbUV0ucm90YXRlWS8yLHRyYW5zbGF0ZTNkOlswLDAsKG8/MTowLjUpKmJdfSxlbmQ6e2xlZnQ6MCx0b3A6MCxzY2FsZToxLHJvdGF0ZVg6d1tRXS5yb3RhdGVYLHJvdGF0ZVk6d1tRXS5yb3RhdGVZLHRyYW5zbGF0ZTNkOlswLDAsYl19fTtQLmZyb250LmZpbmQoImltZyIpLmNzcyhMKTtQLmJhY2suY3NzKCJiYWNrZmFjZVZpc2liaWxpdHkiLCJoaWRkZW4iKS5maW5kKCJpbWciKS5jc3MoTCk7UC5wYXJ0LmNzcyh7d2lkdGg6UC5hbmltYXRlLmJlZ2luLndpZHRoLGhlaWdodDpQLmFuaW1hdGUuYmVnaW4uaGVpZ2h0LGxlZnQ6UC5hbmltYXRlLmJlZ2luLmxlZnQsdG9wOlAuYW5pbWF0ZS5iZWdpbi50b3B9KX19ZShZLE4pfXZhciBkO3RoaXMuZ289ZnVuY3Rpb24oVSxLKXtpZihkKXtyZXR1cm4gS31uLnNob3coKTt2YXIgST1oKHEuZ2V0KEspKTtJPXt3aWR0aDpJLndpZHRoKCksaGVpZ2h0OkkuaGVpZ2h0KCksbWFyZ2luVG9wOnBhcnNlRmxvYXQoSS5jc3MoIm1hcmdpblRvcCIpKSxtYXJnaW5MZWZ0OnBhcnNlRmxvYXQoSS5jc3MoIm1hcmdpbkxlZnQiKSl9O3c9KGZ1bmN0aW9uKCl7dmFyIGFhPVswLDFdO3ZhciBhYj1bMS4yLDAuOF07dmFyIFo9WzAuMiwwLC0wLjJdO3ZhciBZPVsxODAsLTE4MF07YWE9YWFbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihhYS5sZW5ndGgpKV07YWI9YWJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihhYi5sZW5ndGgpKV07Wj1aW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooWi5sZW5ndGgpKV07WT1ZW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooWS5sZW5ndGgpKV07dmFyIGo9YTt2YXIgaT1bXTtmb3IodmFyIFg9KGFhPzA6aik7YWE/KFg8PWopOihYPj0wKTthYT8oWCsrKTooWC0tKSl7aS5wdXNoKHt6SW5kZXg6WC0oYWE/ajowKSxyb3RhdGVZOlksZGVsYXk6WC9qLGhhbGZTY2FsZTphYixoYWxmTGVmdDpafSl9cmV0dXJuIGl9KCkpO2lmKHApe0VbMF0uZnJvbnQuZmluZCgiaW1nIikub24oImxvYWQiLGZ1bmN0aW9uKCl7cy5oaWRlKCl9KTtmb3IodmFyIEwgaW4gRSl7aWYodHlwZW9mIEVbTF0hPT0iZnVuY3Rpb24iKXtFW0xdLmZyb250LmZpbmQoImltZyIpLmF0dHIoInNyYyIscS5nZXQoSykuc3JjKTtFW0xdLmJhY2suZmluZCgiaW1nIikuYXR0cigic3JjIixxLmdldChVKS5zcmMpfX1pZighdltLXSl7dltLXT1BKEspfWQ9bmV3IGsoRSxLLEksZnVuY3Rpb24oKXtzLnNob3coKTttLnRyaWdnZXIoImVmZmVjdEVuZCIpO24uaGlkZSgpO2Zvcih2YXIgaSBpbiBFKXtpZih0eXBlb2YgRVtpXSE9PSJmdW5jdGlvbiIpe0VbaV0ucGFydC5jc3Moe3RyYW5zaXRpb246IiIsdHJhbnNmb3JtOiJyb3RhdGVYKDApIHJvdGF0ZVkoMCkgdHJhbnNsYXRlM2QoMCwwLDApIn0pfX1kPTB9KX1lbHNle2Q9dHJ1ZTtmdW5jdGlvbiBWKGosaSl7cmV0dXJuIE1hdGgucmFuZG9tKCkqKGktaisxKStqfXZhciBRPWcud2lkdGgoKSxUPWcuaGVpZ2h0KCksUD1RL2EsUz1ULEo9US1QKihhLTEpLFI9VDtuLmNzcyh7d2lkdGg6USxoZWlnaHQ6VH0pO3ZhciBIPTA7Zm9yKHZhciBMIGluIEUpe3ZhciBPPUwlYSxOPU1hdGguZmxvb3IoTC9hKTtFW0xdLmZyb250LmZpbmQoImltZyIpLmF0dHIoInNyYyIscS5nZXQoVSkuc3JjKS5jc3MoSSk7dmFyIFc9Zi5kdXJhdGlvbiooMS1NYXRoLmFicygoYypGLU8qTikvKDIqYSkpKTt2YXIgTT1WKC0xLDEpPjA/MTotMTtFW0xdLndyYXBwZXIuY3NzKHt3aWR0aDpQLGhlaWdodDpTfSk7RVtMXS5wYXJ0LmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0Ok0qUCxvcGFjaXR5OjAsd2lkdGg6UCxoZWlnaHQ6U30pLmFuaW1hdGUoe2xlZnQ6MCxvcGFjaXR5OjF9LFcsZnVuY3Rpb24oKXtIKys7aWYoSD09YSl7cy5zdG9wKDEsMSk7ZD1mYWxzZTttLnRyaWdnZXIoImVmZmVjdEVuZCIpfX0pfX19O2Z1bmN0aW9uIEQoUSxIKXtIPUh8fHt9O3ZhciBTPTEsSz1ILmV4Y2x1ZGV8fFtdLFA7dmFyIE09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksSj1NLmdldENvbnRleHQoIjJkIiksST1NLndpZHRoPVEubmF0dXJhbFdpZHRoLFc9TS5oZWlnaHQ9US5uYXR1cmFsSGVpZ2h0O0ouZHJhd0ltYWdlKFEsMCwwLFEubmF0dXJhbFdpZHRoLFEubmF0dXJhbEhlaWdodCk7dHJ5e1A9Si5nZXRJbWFnZURhdGEoSC54P0gueDowLEgueT9ILnk6MCxILnc/SC53OlEud2lkdGgsSC5oP0guaDpRLmhlaWdodClbImRhdGEiXX1jYXRjaChSKXtjb25zb2xlLmxvZygiZXJyb3I6dW5hYmxlIHRvIGFjY2VzcyBpbWFnZSBkYXRhOiAiK1IpO3JldHVybiIjY2NjIn12YXIgTD0oSC53P0gudzpRLndpZHRoKkguaD9ILmg6US5oZWlnaHQpfHxQLmxlbmd0aCxOPXt9LFU9IiIsVD1bXSxqPXtkb21pbmFudDp7bmFtZToiIixjb3VudDowfX07dmFyIE89MDt3aGlsZShPPEwpe1RbMF09UFtPXTtUWzFdPVBbTysxXTtUWzJdPVBbTysyXTtVPVQuam9pbigiLCIpO2lmKFUgaW4gTil7TltVXT1OW1VdKzF9ZWxzZXtOW1VdPTF9aWYoSy5pbmRleE9mKFsicmdiKCIsVSwiKSJdLmpvaW4oIiIpKT09PS0xKXt2YXIgVj1OW1VdO2lmKFY+ai5kb21pbmFudC5jb3VudCl7ai5kb21pbmFudC5uYW1lPVU7ai5kb21pbmFudC5jb3VudD1WfX1PKz1TKjR9cmV0dXJuWyJyZ2IoIixqLmRvbWluYW50Lm5hbWUsIikiXS5qb2luKCIiKX19Oy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIGh0dHA6Ly93b3dzbGlkZXIuY29tLwovLyBKYXZhU2NyaXB0IFdvdyBTbGlkZXIgaXMgYSBmcmVlIHNvZnR3YXJlIHRoYXQgaGVscHMgeW91IGVhc2lseSBnZW5lcmF0ZSBkZWxpY2lvdXMgCi8vIHNsaWRlc2hvd3Mgd2l0aCBnb3JnZW91cyB0cmFuc2l0aW9uIGVmZmVjdHMsIGluIGEgZmV3IGNsaWNrcyB3aXRob3V0IHdyaXRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLgovLyBHZW5lcmF0ZWQgYnkgV09XIFNsaWRlciA4LjcKLy8KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBPYmZ1c2NhdGVkIGJ5IEphdmFzY3JpcHQgT2JmdXNjYXRvcgovLyBodHRwOi8vamF2YXNjcmlwdC1zb3VyY2UuY29tCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKalF1ZXJ5LmV4dGVuZChqUXVlcnkuZWFzaW5nLHtlYXNlT3V0QmFjazI6ZnVuY3Rpb24oZixnLGUsaixpKXt2YXIgaD0oZy89aSkqZzt2YXIgYT1oKmc7cmV0dXJuIGUraiooNSphKmgrLTE1KmgqaCsxOSphKy0xNCpoKzYqZyl9LGVhc2VPdXRDdWJpYzpmdW5jdGlvbihlLGYsYSxoLGcpe3JldHVybiBoKigoZj1mL2ctMSkqZipmKzEpK2F9LGVhc2VJbkN1YmljOmZ1bmN0aW9uKGUsZixhLGgsZyl7cmV0dXJuIGgqKGYvPWcpKmYqZithfX0pO2Z1bmN0aW9uIHdzX3R2KG0saSxiKXt2YXIgZD1qUXVlcnk7dmFyIGc9ZCh0aGlzKTt2YXIgaz1tLm5vQ2FudmFzfHwhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dDt2YXIgaj1tLndpZHRoLGU9bS5oZWlnaHQ7dmFyIGY9ZCgiPGRpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4ifSkuYWRkQ2xhc3MoIndzX2VmZmVjdCB3c190diIpLmFwcGVuZFRvKGIpO2lmKCFrKXt2YXIgYz1kKCI8Y2FudmFzPiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9KS5hcHBlbmRUbyhmKTt2YXIgbD1jLmdldCgwKS5nZXRDb250ZXh0KCIyZCIpfWZ1bmN0aW9uIGEobixoLG8pe3JldHVybiBuKyhoLW4pKm99dGhpcy5nbz1mdW5jdGlvbihoLG8pe2lmKGspe2IuZmluZCgiLndzX2xpc3QiKS5jc3MoInRyYW5zZm9ybSIsInRyYW5zbGF0ZTNkKDAsMCwwKSIpLnN0b3AodHJ1ZSkuYW5pbWF0ZSh7bGVmdDooaD8taCsiMDAlIjooL1NhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT8iMCUiOjApKX0sbS5kdXJhdGlvbiwiZWFzZUluT3V0RXhwbyIsZnVuY3Rpb24oKXtnLnRyaWdnZXIoImVmZmVjdEVuZCIpfSl9ZWxzZXtqPWIud2lkdGgoKTtlPWIuaGVpZ2h0KCk7Yy5hdHRyKHt3aWR0aDpqLGhlaWdodDplfSk7dmFyIG49ZChpLmdldChoKSkuY2xvbmUoKS5jc3Moe29wYWNpdHk6MCx6SW5kZXg6MixtYXhIZWlnaHQ6Im5vbmUifSkuYXBwZW5kVG8oZik7d293QW5pbWF0ZShmdW5jdGlvbihwKXtsLmNsZWFyUmVjdCgwLDAsaixlKTt2YXIgcj1qO2lmKHA+PTAuOTUpe3IqPTEtKHAtMC45NSkvKDEtMC45NSl9bC5maWxsU3R5bGU9IiMxMTEiO2wuZmlsbFJlY3QoMCwwLGosZSk7dmFyIHE9bC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLHAqZS8yLDAsZS1wKmUvMik7cS5hZGRDb2xvclN0b3AoMCwiIzExMSIpO3EuYWRkQ29sb3JTdG9wKGEoMCwwLjUscCksIiNmZmYiKTtxLmFkZENvbG9yU3RvcCgwLjUsIiNmZmYiKTtxLmFkZENvbG9yU3RvcChhKDEsMC41LHApLCIjZmZmIik7cS5hZGRDb2xvclN0b3AoMSwiIzExMSIpO2wuZmlsbFN0eWxlPXE7bC5maWxsUmVjdCgoai1yKS8yLHAqZS8yLHIsZSooMS1wKSl9LDAsMSxtLmR1cmF0aW9uKjAuMywiZWFzZU91dEN1YmljIixmdW5jdGlvbigpe3dvd0FuaW1hdGUobix7c2NhbGU6WzAuOSwwXSxvcGFjaXR5OjAuNX0se3NjYWxlOlsxLDFdLG9wYWNpdHk6MX0sbS5kdXJhdGlvbiowLjMsbS5kdXJhdGlvbiowLjQsImVhc2VPdXRCYWNrMiIsZnVuY3Rpb24oKXtiLmZpbmQoIi53c19saXN0IikuY3NzKHtsZWZ0OihoPy1oKyIwMCUiOigvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpPyIwJSI6MCkpfSk7Zy50cmlnZ2VyKCJlZmZlY3RFbmQiKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5maWxsU3R5bGU9IiMxMTEiO2wuY2xlYXJSZWN0KDAsMCxqLGUpO24ucmVtb3ZlKCl9LDEpfSl9KX19fTsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBodHRwOi8vd293c2xpZGVyLmNvbS8KLy8gSmF2YVNjcmlwdCBXb3cgU2xpZGVyIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IGhlbHBzIHlvdSBlYXNpbHkgZ2VuZXJhdGUgZGVsaWNpb3VzIAovLyBzbGlkZXNob3dzIHdpdGggZ29yZ2VvdXMgdHJhbnNpdGlvbiBlZmZlY3RzLCBpbiBhIGZldyBjbGlja3Mgd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS4KLy8gR2VuZXJhdGVkIGJ5IFdPVyBTbGlkZXIgOC43Ci8vCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gT2JmdXNjYXRlZCBieSBKYXZhc2NyaXB0IE9iZnVzY2F0b3IKLy8gaHR0cDovL2phdmFzY3JpcHQtc291cmNlLmNvbQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmpRdWVyeS5leHRlbmQoalF1ZXJ5LmVhc2luZyx7ZWFzZUluQmFjazpmdW5jdGlvbihlLGYsYSxpLGgsZyl7aWYoZz09dW5kZWZpbmVkKXtnPTEuNzAxNTh9cmV0dXJuIGkqKGYvPWgpKmYqKChnKzEpKmYtZykrYX0sZWFzZU91dEJhY2s6ZnVuY3Rpb24oZSxmLGEsaSxoLGcpe2lmKGc9PXVuZGVmaW5lZCl7Zz0xLjcwMTU4fXJldHVybiBpKigoZj1mL2gtMSkqZiooKGcrMSkqZitnKSsxKSthfSxlYXNlSW5CYWNrUTpmdW5jdGlvbihlLGYsYSxqLGksZyl7dmFyIGg9KGYvPWkpKmY7cmV0dXJuIGEraipoKig0KmYqaC04KmgrOCpmLTMpfSxlYXNlT3V0QmFja1E6ZnVuY3Rpb24oZSxmLGEsaixpLGcpe3ZhciBoPShmLz1pKSpmO3JldHVybiBhK2oqKDQqaCpmKmgtMTIqaCpoKzE2KmgqZi0xMypoKzYqZil9LGVhc2VJbkJhY2tRMjpmdW5jdGlvbihlLGYsYSxqLGksZyl7dmFyIGg9KGYvPWkpKmY7cmV0dXJuIGEraipoKigxLjUqZipoLTIuNSpoKzUqZi0zKX0sZWFzZU91dEJhY2tRMjpmdW5jdGlvbihlLGYsYSxqLGksZyl7dmFyIGg9KGYvPWkpKmY7cmV0dXJuIGEraiooMS41KmgqZipoLTUqaCpoKzEwKmgqZi0xMipoKzYuNSpmKX19KTtmdW5jdGlvbiB3c19icmljayhmLHMsZyl7dmFyIGg9alF1ZXJ5LG49aCh0aGlzKSxhPWYuY29sc3x8NCxyPWYucm93c3x8MyxIPTIuNSxjPTIsdj1mLnBlcnNwZWN0aXZlfHwyMDAwLHU9Zy5maW5kKCIud3NfbGlzdCIpLEc9W10sYj0zMCx4PXt9LG89aCgiPGRpdj4iKS5hZGRDbGFzcygid3NfZWZmZWN0IHdzX2JyaWNrIikuYXBwZW5kVG8oZykscT1mLnN1cHBvcnQudHJhbnNmb3JtJiZmLnN1cHBvcnQudHJhbnNpdGlvbiYmZi5zdXBwb3J0LnBlcnNwZWN0aXZlLHA9L1NhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIS9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbT0vRmlyZWZveC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTt2YXIgeT1be3pJbmRleDowLHJvdGF0ZVg6MzYwLHJvdGF0ZVo6LTM2MCxyb3RhdGVZOjE4MCxoYWxmU2NhbGU6MC41LGhhbGZMZWZ0OjAuNyxoYWxmVG9wOjAuNyxkZWxheTowLjM2fSx7ekluZGV4OjEscm90YXRlWDotMzYwLHJvdGF0ZVo6MzYwLHJvdGF0ZVk6MTgwLGhhbGZTY2FsZTowLjUsaGFsZkxlZnQ6MC4yLGhhbGZUb3A6MC40LGRlbGF5OjAuODF9LHt6SW5kZXg6MSxyb3RhdGVYOjM2MCxyb3RhdGVaOi0zNjAscm90YXRlWTotMTgwLGhhbGZTY2FsZTowLjUsaGFsZkxlZnQ6LTAuMixoYWxmVG9wOjAuNCxkZWxheTowLjQ1fSx7ekluZGV4OjAscm90YXRlWDotMzYwLHJvdGF0ZVo6MzYwLHJvdGF0ZVk6LTE4MCxoYWxmU2NhbGU6MC41LGhhbGZMZWZ0Oi0wLjcsaGFsZlRvcDowLjcsZGVsYXk6MC42M30se3pJbmRleDoxLHJvdGF0ZVg6LTM2MCxyb3RhdGVaOjM2MCxyb3RhdGVZOi0xODAsaGFsZlNjYWxlOjAuNSxoYWxmTGVmdDowLjcsaGFsZlRvcDowLGRlbGF5OjAuNTR9LHt6SW5kZXg6Mixyb3RhdGVYOjM2MCxyb3RhdGVaOi0zNjAscm90YXRlWToxODAsaGFsZlNjYWxlOjAuNSxoYWxmTGVmdDowLjIsaGFsZlRvcDowLGRlbGF5OjAuMzh9LHt6SW5kZXg6Mixyb3RhdGVYOjM2MCxyb3RhdGVaOi0zNjAscm90YXRlWTotMTgwLGhhbGZTY2FsZTowLjUsaGFsZkxlZnQ6LTAuMixoYWxmVG9wOjAsZGVsYXk6MH0se3pJbmRleDoxLHJvdGF0ZVg6LTM2MCxyb3RhdGVaOjM2MCxyb3RhdGVZOjE4MCxoYWxmU2NhbGU6MC41LGhhbGZMZWZ0Oi0wLjcsaGFsZlRvcDowLGRlbGF5OjAuNzJ9LHt6SW5kZXg6MCxyb3RhdGVYOi0zNjAscm90YXRlWjozNjAscm90YXRlWToxODAsaGFsZlNjYWxlOjAuNSxoYWxmTGVmdDowLjcsaGFsZlRvcDotMC43LGRlbGF5OjF9LHt6SW5kZXg6MSxyb3RhdGVYOi0zNjAscm90YXRlWjozNjAscm90YXRlWTotMTgwLGhhbGZTY2FsZTowLjUsaGFsZkxlZnQ6MC4yLGhhbGZUb3A6LTAuNCxkZWxheTowLjd9LHt6SW5kZXg6MSxyb3RhdGVYOjM2MCxyb3RhdGVaOi0zNjAscm90YXRlWToxODAsaGFsZlNjYWxlOjAuNSxoYWxmTGVmdDotMC4yLGhhbGZUb3A6LTAuNCxkZWxheTowLjU3fSx7ekluZGV4OjAscm90YXRlWDozNjAscm90YXRlWjotMzYwLHJvdGF0ZVk6LTE4MCxoYWxmU2NhbGU6MC41LGhhbGZMZWZ0Oi0wLjcsaGFsZlRvcDotMC43LGRlbGF5OjAuOX0sXTtvLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsd2lkdGg6Zy53aWR0aCgpLGhlaWdodDpnLmhlaWdodCgpLHRyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwwLDApIix0cmFuc2Zvcm1PcmlnaW46KGYud2lkdGgvMikrInB4ICIrKGYuaGVpZ2h0LzIpKyJweCAwIixwZXJzcGVjdGl2ZTp2fSkuaGlkZSgpO2Zvcih2YXIgbD0wO2w8YSpyO2wrKyl7dmFyIEI9bCVhLEE9TWF0aC5mbG9vcihsL2EpO3ZhciBFPWgoIjxkaXY+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6MTAwKkIvYSsiJSIsdG9wOjEwMCpBL3IrIiUiLG91dGxpbmU6IjFweCBzb2xpZCB0cmFuc3BhcmVudCIsdHJhbnNmb3JtU3R5bGU6KHB8fG0pPyJmbGF0IjoicHJlc2VydmUtM2QiLHpJbmRleDp5W2xdLnpJbmRleCxvdmVyZmxvdzpxPyJ2aXNpYmxlIjoiaGlkZGVuIn0pLmFwcGVuZFRvKG8pLHo9aCgiPGRpdj4iKS5jc3Moe3RyYW5zZm9ybToic2NhbGUoMSkgcm90YXRlWCgwKSByb3RhdGVZKDApIHRyYW5zbGF0ZTNkKDAsMCwwKSIsb3V0bGluZToiMXB4IHNvbGlkIHRyYW5zcGFyZW50Iix0cmFuc2Zvcm1TdHlsZToicHJlc2VydmUtM2QifSkuYXBwZW5kVG8oRSksdz1oKCI8ZGl2PiIpLmFkZENsYXNzKCJ3c19mcm9udF9pbWFnZSIpLmFwcGVuZFRvKHopLEQ9cT9oKCI8ZGl2PiIpLmFkZENsYXNzKCJ3c19iYWNrX2ltYWdlIikuYXBwZW5kVG8oeik6MDt3LmNzcyh7cG9zaXRpb246ImFic29sdXRlIix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgwLDAsMCkifSkuYXBwZW5kKGgoIjxpbWc+IikuY3NzKHtsZWZ0Oi1CKjEwMCsiJSIsdG9wOi1BKjEwMCsiJSIscG9zaXRpb246ImFic29sdXRlIixvdXRsaW5lOiIxcHggc29saWQgdHJhbnNwYXJlbnQifSkpO2lmKHEpe0QuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIix0cmFuc2Zvcm06InJvdGF0ZVkoMTgwZGVnKSB0cmFuc2xhdGUzZCgwLDAsIitiKyJweCkifSkuYXBwZW5kKGgoIjxpbWc+IikuY3NzKHtsZWZ0Oi1CKjEwMCsiJSIsdG9wOi1BKjEwMCsiJSIscG9zaXRpb246ImFic29sdXRlIixvdXRsaW5lOiIxcHggc29saWQgdHJhbnNwYXJlbnQifSkpfXZhciB0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLG91dGxpbmU6IjFweCBzb2xpZCB0cmFuc3BhcmVudCJ9O0dbbF09e3BhcnQ6eixmcm9udDp3LGJhY2s6RCx3cmFwcGVyOkUsbGVmdEVkZ2U6cT9oKCI8ZGl2PiIpLmFkZENsYXNzKCJ3c19sZWZ0X2VkZ2UiKS5jc3ModCkuYXBwZW5kVG8oeik6MCxyaWdodEVkZ2U6cT9oKCI8ZGl2PiIpLmFkZENsYXNzKCJ3c19yaWdodF9lZGdlIikuY3NzKHQpLmFwcGVuZFRvKHopOjAsdG9wRWRnZTpxP2goIjxkaXY+IikuYWRkQ2xhc3MoIndzX3RvcF9lZGdlIikuY3NzKHQpLmFwcGVuZFRvKHopOjAsYm90dG9tRWRnZTpxP2goIjxkaXY+IikuYWRkQ2xhc3MoIndzX2JvdHRvbV9lZGdlIikuY3NzKHQpLmFwcGVuZFRvKHopOjB9fWZ1bmN0aW9uIEMoTil7dmFyIEo9e30sTD1zLmdldChOKSxPPWYud2lkdGgvYSxQPWYuaGVpZ2h0L3I7Zm9yKHZhciBLPTA7SzxhKnI7SysrKXt2YXIgTj1LJWEsTT1NYXRoLmZsb29yKEsvYSk7SltLXT1GKEwse3g6TipPLHk6TSpQLHc6TyxoOlB9KX1yZXR1cm4gSn1mdW5jdGlvbiBJKEosTSxqLEssTCl7Zm9yKHZhciBpIGluIE0pe2lmKHR5cGVvZiBHW2ldIT09ImZ1bmN0aW9uIil7TVtpXS50b3BFZGdlLmNzcyh7d2lkdGg6SyxoZWlnaHQ6SixiYWNrZ3JvdW5kOmpbaV0sdHJhbnNmb3JtOiJyb3RhdGVYKDkwZGVnKSB0cmFuc2xhdGUzZCgwLC0iK0ovMisicHgsIitKLzIrInB4KSJ9KTtNW2ldLmJvdHRvbUVkZ2UuY3NzKHt3aWR0aDpLLGhlaWdodDpKLGJhY2tncm91bmQ6altpXSx0cmFuc2Zvcm06InJvdGF0ZVgoOTBkZWcpIHRyYW5zbGF0ZTNkKDAsLSIrSi8yKyJweCwiKygtTCtKLzIpKyJweCkifSk7TVtpXS5sZWZ0RWRnZS5jc3Moe3dpZHRoOkosaGVpZ2h0OkwsYmFja2dyb3VuZDpqW2ldLHRyYW5zZm9ybToicm90YXRlWSg5MGRlZykgdHJhbnNsYXRlM2QoIitKLzIrInB4LDAsLSIrSi8yKyJweCkifSk7TVtpXS5yaWdodEVkZ2UuY3NzKHt3aWR0aDpKLGhlaWdodDpMLGJhY2tncm91bmQ6altpXSx0cmFuc2Zvcm06InJvdGF0ZVkoOTBkZWcpIHRyYW5zbGF0ZTNkKCIrSi8yKyJweCwwLCIrKEstSi8yKSsicHgpIn0pfX19ZnVuY3Rpb24gZShKLEspe3ZhciBpPTA7Zm9yKHZhciBqIGluIEope2lmKHR5cGVvZiBKW2pdIT09ImZ1bmN0aW9uIil7KGZ1bmN0aW9uKEwsTSl7d293QW5pbWF0ZShmdW5jdGlvbihPKXt2YXIgVSxTLFQsUj0iIixOPXt9O2lmKE88PTAuNSl7VT1oLmVhc2luZy5lYXNlSW5CYWNrKDEsTyoyLDAsMSwxLDEpLnRvRml4ZWQoMyk7Uz1oLmVhc2luZy5lYXNlSW5CYWNrUSgxLE8qMiwwLDEsMSwxKS50b0ZpeGVkKDMpO1Q9aC5lYXNpbmcuZWFzZUluQmFja1EyKDEsTyoyLDAsMSwxLDEpLnRvRml4ZWQoMyk7TVtMXS5iYWNrLmNzcygiYmFja2ZhY2VWaXNpYmlsaXR5IiwiaGlkZGVuIil9ZWxzZXtVPWguZWFzaW5nLmVhc2VPdXRCYWNrKDEsKE8tMC41KSoyLDAsMSwxLDEpLnRvRml4ZWQoMyk7Uz1oLmVhc2luZy5lYXNlT3V0QmFja1EoMSwoTy0wLjUpKjIsMCwxLDEsMSkudG9GaXhlZCgzKTtUPWguZWFzaW5nLmVhc2VPdXRCYWNrUTIoMSwoTy0wLjUpKjIsMCwxLDEsMSkudG9GaXhlZCgzKTtNW0xdLmJhY2suY3NzKCJiYWNrZmFjZVZpc2liaWxpdHkiLCJ2aXNpYmxlIil9Zm9yKHZhciBQIGluIE1bTF0uYW5pbWF0ZVtPPD0wLjU/ImhhbGYiOiJlbmQiXSl7dmFyIFY9TVtMXS5hbmltYXRlW088PTAuNT8iYmVnaW4iOiJoYWxmIl1bUF18fDAsUT1NW0xdLmFuaW1hdGVbTzw9MC41PyJoYWxmIjoiZW5kIl1bUF18fDA7aWYodHlwZW9mIFEhPT0ib2JqZWN0Iil7aWYoUD09PSJzY2FsZSJ8fFA9PT0icm90YXRlWCJ8fFA9PT0icm90YXRlWSIpe1E9VisoUS1WKSpTfWVsc2V7aWYoUD09PSJsZWZ0Inx8UD09PSJ0b3AiKXtRPVYrKFEtVikqVH1lbHNle1E9VisoUS1WKSpVfX19aWYoUD09PSJyb3RhdGVYInx8UD09PSJyb3RhdGVZInx8UD09PSJyb3RhdGVaIil7Uis9UCsiKCIrUSsiZGVnKSAifWVsc2V7aWYoUD09PSJzY2FsZSIpe1IrPVArIigiK1ErIikgIn1lbHNle2lmKFA9PT0idHJhbnNsYXRlM2QiKXtSKz1QKyIoIisoVlswXSsoUVswXS1WWzBdKSpVKS50b0ZpeGVkKDMpKyJweCwiKyhWWzFdKyhRWzFdLVZbMV0pKlUpLnRvRml4ZWQoMykrInB4LCIrKFZbMl0rKFFbMl0tVlsyXSkqVSkudG9GaXhlZCgzKSsicHgpICJ9ZWxzZXtOW1BdPVF9fX19TVtMXS53cmFwcGVyLmNzcyh7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgiKyhOLmxlZnQ/Ti5sZWZ0OjApLnRvRml4ZWQoMykrInB4LCIrKE4udG9wP04udG9wOjApLnRvRml4ZWQoMykrInB4LDApIn0pO2RlbGV0ZSBOLmxlZnQ7ZGVsZXRlIE4udG9wO2lmKFIpe04udHJhbnNmb3JtPVJ9TVtMXS5wYXJ0LmNzcyhOKX0sMCwxLE1bTF0uYW5pbWF0ZS5kdXJhdGlvbixNW0xdLmFuaW1hdGUuZGVsYXksZnVuY3Rpb24oKXtpKys7aWYoaT09TS5sZW5ndGgmJkspe0soKX19KX0oaixKKSl9fX1mdW5jdGlvbiBrKGFhLE0sTixQKXt2YXIgWD1nLndpZHRoKCksVz1nLmhlaWdodCgpLFY9WC9hLFU9Vy9yLEw9KGYuZHVyYXRpb24qMC40KT4xMDAwPzEwMDA6KGYuZHVyYXRpb24qMC40KSxLPWYuZHVyYXRpb24qMC42LFE9WzAsMF07SShiLGFhLHhbTV0sVixVKTtvLmNzcyh7dHJhbnNmb3JtT3JpZ2luOihYLzIpKyJweCAiKyhXLzIpKyJweCAwIix3aWR0aDpYLGhlaWdodDpXfSk7Zm9yKHZhciBTIGluIGFhKXtpZih0eXBlb2YgYWFbU10hPT0iZnVuY3Rpb24iKXt2YXIgSj15W1NdLmRlbGF5Kkw7aWYoUVsxXTw9Sil7UVswXT1TO1FbMV09Sn1hYVtTXS5wYXJ0WzBdLndzX2RlbGF5PVtKLDBdfX1hYVtRWzBdXS5wYXJ0WzBdLndzX2RlbGF5WzFdPTE7Zm9yKHZhciBTIGluIGFhKXtpZih0eXBlb2YgYWFbU10hPT0iZnVuY3Rpb24iKXt2YXIgUj1hYVtTXSxaPVMlYSxZPU1hdGguZmxvb3IoUy9hKSxUPVgqWi9hLE89VypZL3I7Ui5hbmltYXRlPXtkZWxheTpSLnBhcnRbMF0ud3NfZGVsYXlbMF0sZHVyYXRpb246SyxiZWdpbjp7bGVmdDowLHRvcDowLHdpZHRoOlYsaGVpZ2h0OlUsc2NhbGU6MSxyb3RhdGVYOjAscm90YXRlWTowLHRyYW5zbGF0ZTNkOlswLDAscD9iOjBdfSxoYWxmOntsZWZ0OnlbU10uaGFsZkxlZnQqVix0b3A6eVtTXS5oYWxmVG9wKlUsc2NhbGU6eVtTXS5oYWxmU2NhbGUscm90YXRlWDp5W1NdLnJvdGF0ZVgvMixyb3RhdGVZOnlbU10ucm90YXRlWS8yLHRyYW5zbGF0ZTNkOlswLDAsKHA/MTowLjUpKmJdfSxlbmQ6e2xlZnQ6MCx0b3A6MCxzY2FsZToxLHJvdGF0ZVg6eVtTXS5yb3RhdGVYLHJvdGF0ZVk6eVtTXS5yb3RhdGVZLHRyYW5zbGF0ZTNkOlswLDAsYl19fTtSLmZyb250LmZpbmQoImltZyIpLmNzcyhOKTtSLmJhY2suY3NzKCJiYWNrZmFjZVZpc2liaWxpdHkiLCJoaWRkZW4iKS5maW5kKCJpbWciKS5jc3MoTik7Ui5wYXJ0LmNzcyh7d2lkdGg6Ui5hbmltYXRlLmJlZ2luLndpZHRoLGhlaWdodDpSLmFuaW1hdGUuYmVnaW4uaGVpZ2h0LGxlZnQ6Ui5hbmltYXRlLmJlZ2luLmxlZnQsdG9wOlIuYW5pbWF0ZS5iZWdpbi50b3B9KX19ZShhYSxQKX12YXIgZDt0aGlzLmdvPWZ1bmN0aW9uKFgsTSl7aWYoZCl7cmV0dXJuIE19by5zaG93KCk7dmFyIEs9aChzLmdldChNKSk7Sz17d2lkdGg6Sy53aWR0aCgpLGhlaWdodDpLLmhlaWdodCgpLG1hcmdpblRvcDpwYXJzZUZsb2F0KEsuY3NzKCJtYXJnaW5Ub3AiKSksbWFyZ2luTGVmdDpwYXJzZUZsb2F0KEsuY3NzKCJtYXJnaW5MZWZ0IikpfTtpZihxKXtHWzBdLmZyb250LmZpbmQoImltZyIpLm9uKCJsb2FkIixmdW5jdGlvbigpe3UuaGlkZSgpfSk7Zm9yKHZhciBOIGluIEcpe2lmKHR5cGVvZiBHW05dIT09ImZ1bmN0aW9uIil7R1tOXS5mcm9udC5maW5kKCJpbWciKS5hdHRyKCJzcmMiLHMuZ2V0KE0pLnNyYyk7R1tOXS5iYWNrLmZpbmQoImltZyIpLmF0dHIoInNyYyIscy5nZXQoWCkuc3JjKX19aWYoIXhbTV0pe3hbTV09QyhNKX1kPW5ldyBrKEcsTSxLLGZ1bmN0aW9uKCl7dS5zaG93KCk7bi50cmlnZ2VyKCJlZmZlY3RFbmQiKTtvLmhpZGUoKTtmb3IodmFyIGkgaW4gRyl7aWYodHlwZW9mIEdbaV0hPT0iZnVuY3Rpb24iKXtHW2ldLnBhcnQuY3NzKHt0cmFuc2l0aW9uOiIiLHRyYW5zZm9ybToicm90YXRlWCgwKSByb3RhdGVZKDApIHRyYW5zbGF0ZTNkKDAsMCwwKSJ9KX19ZD0wfSl9ZWxzZXtkPXRydWU7ZnVuY3Rpb24gWShqLGkpe3JldHVybiBNYXRoLnJhbmRvbSgpKihpLWorMSkran12YXIgVD1nLndpZHRoKCksVz1nLmhlaWdodCgpLFM9VC9hLFY9Vy9yLEw9VC1TKihhLTEpLFU9Vy1WKihyLTEpO28uY3NzKHt3aWR0aDpULGhlaWdodDpXfSk7dmFyIEo9MDtmb3IodmFyIE4gaW4gRyl7dmFyIFI9TiVhLFA9TWF0aC5mbG9vcihOL2EpO0dbTl0uZnJvbnQuZmluZCgiaW1nIikuYXR0cigic3JjIixzLmdldChYKS5zcmMpLmNzcyhLKTt2YXIgWj1mLmR1cmF0aW9uKigxLU1hdGguYWJzKChjKkgtUipQKS8oMipyKmEpKSk7dmFyIFE9WSgtMSwxKT4wPzE6LTE7dmFyIE89WSgtMSwxKT4wPzE6LTE7R1tOXS53cmFwcGVyLmNzcyh7d2lkdGg6UyxoZWlnaHQ6Vn0pO0dbTl0ucGFydC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOlEqVixsZWZ0Ok8qUyxvcGFjaXR5OjAsd2lkdGg6UyxoZWlnaHQ6Vn0pLmFuaW1hdGUoe3RvcDowLGxlZnQ6MCxvcGFjaXR5OjF9LFosZnVuY3Rpb24oKXtKKys7aWYoSj09ciphKXt1LnN0b3AoMSwxKTtkPWZhbHNlO24udHJpZ2dlcigiZWZmZWN0RW5kIil9fSl9fX07ZnVuY3Rpb24gRihTLEope0o9Snx8e307dmFyIFU9MSxNPUouZXhjbHVkZXx8W10sUjt2YXIgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxMPU8uZ2V0Q29udGV4dCgiMmQiKSxLPU8ud2lkdGg9Uy5uYXR1cmFsV2lkdGgsWT1PLmhlaWdodD1TLm5hdHVyYWxIZWlnaHQ7TC5kcmF3SW1hZ2UoUywwLDAsUy5uYXR1cmFsV2lkdGgsUy5uYXR1cmFsSGVpZ2h0KTt0cnl7Uj1MLmdldEltYWdlRGF0YShKLng/Si54OjAsSi55P0oueTowLEoudz9KLnc6Uy53aWR0aCxKLmg/Si5oOlMuaGVpZ2h0KVsiZGF0YSJdfWNhdGNoKFQpe2NvbnNvbGUubG9nKCJlcnJvcjp1bmFibGUgdG8gYWNjZXNzIGltYWdlIGRhdGE6ICIrVCk7cmV0dXJuIiNjY2MifXZhciBOPShKLnc/Si53OlMud2lkdGgqSi5oP0ouaDpTLmhlaWdodCl8fFIubGVuZ3RoLFA9e30sVz0iIixWPVtdLGo9e2RvbWluYW50OntuYW1lOiIiLGNvdW50OjB9fTt2YXIgUT0wO3doaWxlKFE8Til7VlswXT1SW1FdO1ZbMV09UltRKzFdO1ZbMl09UltRKzJdO1c9Vi5qb2luKCIsIik7aWYoVyBpbiBQKXtQW1ddPVBbV10rMX1lbHNle1BbV109MX1pZihNLmluZGV4T2YoWyJyZ2IoIixXLCIpIl0uam9pbigiIikpPT09LTEpe3ZhciBYPVBbV107aWYoWD5qLmRvbWluYW50LmNvdW50KXtqLmRvbWluYW50Lm5hbWU9VztqLmRvbWluYW50LmNvdW50PVh9fVErPVUqNH1yZXR1cm5bInJnYigiLGouZG9taW5hbnQubmFtZSwiKSJdLmpvaW4oIiIpfX07Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gaHR0cDovL3dvd3NsaWRlci5jb20vCi8vIEphdmFTY3JpcHQgV293IFNsaWRlciBpcyBhIGZyZWUgc29mdHdhcmUgdGhhdCBoZWxwcyB5b3UgZWFzaWx5IGdlbmVyYXRlIGRlbGljaW91cyAKLy8gc2xpZGVzaG93cyB3aXRoIGdvcmdlb3VzIHRyYW5zaXRpb24gZWZmZWN0cywgaW4gYSBmZXcgY2xpY2tzIHdpdGhvdXQgd3JpdGluZyBhIHNpbmdsZSBsaW5lIG9mIGNvZGUuCi8vIEdlbmVyYXRlZCBieSBXT1cgU2xpZGVyIDguNwovLwovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vIE9iZnVzY2F0ZWQgYnkgSmF2YXNjcmlwdCBPYmZ1c2NhdG9yCi8vIGh0dHA6Ly9qYXZhc2NyaXB0LXNvdXJjZS5jb20KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmdW5jdGlvbiB3c19jb2xsYWdlKHIsSSxBKXt2YXIgeT1qUXVlcnksZj15KHRoaXMpLEM9eSgiLndzX2xpc3QiLEEpLG09ci5tYXhRdWFsaXR5fHx0cnVlLHU9ci5tYXhQcmVsb2FkfHwyMCxFPSFyLm5vQ2FudmFzJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0LGU9MTAsRj1mYWxzZSxNPTAuMyxsPTAuNyx3PS0xODAsYT0xODAsZD1JLmxlbmd0aCxTPVtdO3ZhciB2PXkoIjxkaXY+IikuYWRkQ2xhc3MoIndzX2VmZmVjdCB3c19jb2xsYWdlIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGxlZnQ6MCx0b3A6MCxvdmVyZmxvdzoiaGlkZGVuIiwiei1pbmRleCI6OH0pLmFwcGVuZFRvKEEpO2Z1bmN0aW9uIEgoeCxqLGkpe3JldHVybiBwYXJzZUZsb2F0KGkqKGoteCkreCl9ZnVuY3Rpb24gUihXLFYsTil7dmFyIGk9TipWLngsWD1OKlYueSxqPU4qVi53aWR0aCxVPU4qVi5oZWlnaHQ7aWYoRSl7Vy5zYXZlKCk7Vy50cmFuc2xhdGUoaSswLjUqaixYKzAuNSpVKTtXLnJvdGF0ZShWLmFuZ2xlKk1hdGguUEkvMTgwKTtXLnNjYWxlKFYuc2NhbGUsVi5zY2FsZSk7aWYoVi5pbWcpe1cuZHJhd0ltYWdlKFYuaW1nLC0wLjUqaiwtMC41KlUsaixVKX1XLnJlc3RvcmUoKX1lbHNle3koIjxpbWc+IikuYXR0cigic3JjIixWLmltZykuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOjEwMCpqL3Iud2lkdGgrIiUiLGhlaWdodDoxMDAqVS9yLmhlaWdodCsiJSIsbGVmdDoxMDAqaS9yLndpZHRoKyIlIix0b3A6MTAwKlgvci5oZWlnaHQrIiUifSkuYXBwZW5kVG8oVyl9fWZ1bmN0aW9uIGMoVixZLFUsTixXLFope3ZhciB4PVNbVl0sWD1TW1ldLGk9bmV3IERhdGU7aWYoRSl7dmFyIGo9eShJW1ldKTtqPXt3aWR0aDpqLndpZHRoKCksaGVpZ2h0OmouaGVpZ2h0KCksbWFyZ2luVG9wOnBhcnNlRmxvYXQoai5jc3MoIm1hcmdpblRvcCIpKSxtYXJnaW5MZWZ0OnBhcnNlRmxvYXQoai5jc3MoIm1hcmdpbkxlZnQiKSl9O3kodCkuY3NzKGopfXdvd0FuaW1hdGUoZnVuY3Rpb24oYWEpe3ZhciBhaj0xLTIqYWE7aWYoYWo8MCl7YWoqPS0xO2lmKGFqPjEpe2FqPTF9fWFqPWpRdWVyeS5lYXNpbmcuZWFzZUluT3V0UXVhZCgxLGFqLDAsMSwxKTthYT1qUXVlcnkuZWFzaW5nLmVhc2VJbk91dFF1YWQoMSxhYSwwLDEsMSk7aWYoRSl7by53aWR0aD1OO28uaGVpZ2h0PVc7dC53aWR0aD1OO3QuaGVpZ2h0PVc7dmFyIGFiPUgoci53aWR0aC9YLndpZHRoLHIud2lkdGgveC53aWR0aCxhYSksYWM9SCgwLjUsSCgxL1guc2NhbGUsMS94LnNjYWxlLGFhKSxhaiksYWc9SCgxL1guc2NhbGUsMS94LnNjYWxlLGFhKSxhaD1IKFguYW5nbGUseC5hbmdsZSxhYSksYWk9VSp4LndpZHRoLGFkPVUqeC5oZWlnaHQsYWY9VSpIKFgueCx4LngsYWEpLGFlPVUqSChYLnkseC55LGFhKTtpZihRJiZrKXtvLmN0eC5kcmF3SW1hZ2UoaywwLDAsTixXKTtvLmN0eC5zYXZlKCk7by5jdHgudHJhbnNsYXRlKGFmKzAuNSphaSxhZSswLjUqYWQpO28uY3R4LnJvdGF0ZSgtYWgqTWF0aC5QSS8xODApO28uY3R4LnNjYWxlKGFnLGFnKTtvLmN0eC50cmFuc2xhdGUoLShhZiswLjUqYWkpLC0oYWUrMC41KmFkKSk7by5jdHgudHJhbnNmb3JtKGFnLDAsMCxhZywtYWYqYWcsLWFlKmFnKTtvLmN0eC5kcmF3SW1hZ2UoaywtTiwtVyxOKjQsVyo0KTtvLmN0eC5yZXN0b3JlKCl9by5jdHgudHJhbnNmb3JtKGFiLDAsMCxhYiwtYWYqYWIsLWFlKmFiKTtvLmN0eC50cmFuc2xhdGUoYWYrMC41KmFpLGFlKzAuNSphZCk7by5jdHgucm90YXRlKC1haCpNYXRoLlBJLzE4MCk7by5jdHguc2NhbGUoYWMsYWMpO28uY3R4LnRyYW5zbGF0ZSgtKGFmKzAuNSphaSksLShhZSswLjUqYWQpKTtvLmN0eC5nbG9iYWxBbHBoYT1IKDAuMiwxLGFqKTtpZihtKXtmb3IoUCBpbiBTKXtSKG8uY3R4LFNbUF0sVSl9fWVsc2V7by5jdHguZHJhd0ltYWdlKEwsMCwwKX1vLmN0eC5nbG9iYWxBbHBoYT0xO28uY3R4Lmdsb2JhbEFscGhhPUgoMCwxLGFqKTtSKG8uY3R4LHgsVSk7by5jdHguZ2xvYmFsQWxwaGE9SCgxLDAsYWEqMj4xPzE6YWEqMik7UihvLmN0eCxYLFUpO28uY3R4Lmdsb2JhbEFscGhhPTE7dC5jdHguZHJhd0ltYWdlKG8sMCwwKX1lbHNle3ZhciBhaz1IKDIsTi8oWC53aWR0aCpVKSxhaiksYWY9LVUqSChYLngseC54LGFhKSphayxhZT0tVSpIKFgueSx4LnksYWEpKmFrLGFpPU4qYWssYWQ9Vyphazt0LmNzcyh7bGVmdDphZix0b3A6YWUsd2lkdGg6YWksaGVpZ2h0OmFkfSl9di5zaG93KCl9LDAsMSxyLmR1cmF0aW9uLGZ1bmN0aW9uKCl7WigpfSl9ZnVuY3Rpb24gQihWLGksVSxqLE4pe2lmKFY+aXx8IVNbVl18fFNbVl0uaW1nKXtyZXR1cm59dmFyIHg9bmV3IEltYWdlKCk7eC5vbmxvYWQ9ZnVuY3Rpb24oKXtTW1ZdLmltZz14O2lmKFUmJlYhPU5bMF0mJlYhPU5bMV0pe1IoaixTW1ZdLDEpO0IoVisxLGksdHJ1ZSxqLE4pfWVsc2V7QihWKzEsaSxmYWxzZSl9fTt4Lm9uZXJyb3I9ZnVuY3Rpb24oKXtpZihVJiZWIT1OWzBdJiZWIT1OWzFdKXtSKGosU1tWXSwxKTtCKFYrMSxpLHRydWUsaixOKX1lbHNle0IoVisxLGksZmFsc2UpfX07eC5zcmM9SVtWXS5zcmN9dmFyIHE9MCxwPTAscz1yLndpZHRoLyhNYXRoLnNxcnQoZCkrMSksej1yLmhlaWdodC8oTWF0aC5zcXJ0KGQpKzEpLGI9TWF0aC5mbG9vcihyLndpZHRoL3MpO2ZvcihQPTA7UDxkO1ArKyl7aWYocytxPnMqYil7cD1NYXRoLmZsb29yKHMqKFArMSkvci53aWR0aCkqejtxPTB9U1tQXT17eDpxLHk6cCx3aWR0aDpzLGhlaWdodDp6LGltZzpudWxsfTtpZihFKXtTW1BdLnNjYWxlPUgoTSxsLE1hdGgucmFuZG9tKCkpO1NbUF0uYW5nbGU9SCh3LGEsTWF0aC5yYW5kb20oKSl9cSs9cGFyc2VGbG9hdChzKX1mb3IodmFyIE8sRCxQPVMubGVuZ3RoO1A7Tz1wYXJzZUludChNYXRoLnJhbmRvbSgpKlApLEQ9U1stLVBdLFNbUF09U1tPXSxTW09dPUQpe31pZihFKXt2YXIgdD15KCI8Y2FudmFzPiIpWzBdO3QuY3R4PXQuZ2V0Q29udGV4dCgiMmQiKTt0LndpZHRoPXYud2lkdGgoKTt0LmhlaWdodD12LmhlaWdodCgpO3ZhciBvPXkoIjxjYW52YXM+IilbMF07by5jdHg9by5nZXRDb250ZXh0KCIyZCIpO28ud2lkdGg9di53aWR0aCgpO28uaGVpZ2h0PXYuaGVpZ2h0KCk7dmFyIGs9eSgiPGNhbnZhcz4iKVswXTtrLmN0eD1rLmdldENvbnRleHQoIjJkIik7ay53aWR0aD12LndpZHRoKCk7ay5oZWlnaHQ9di5oZWlnaHQoKTtpZighbSl7dmFyIEw9eSgiPGNhbnZhcz4iKVswXTtMLmN0eD1MLmdldENvbnRleHQoIjJkIik7TC53aWR0aD12LndpZHRoKCk7TC5oZWlnaHQ9di5oZWlnaHQoKX12LmFwcGVuZCh0KX1lbHNle3ZhciB0PXYuY2xvbmUoKS5yZW1vdmVDbGFzcygid3NfZWZmZWN0IikuY3NzKHtvdmVyZmxvdzoidmlzaWJsZSJ9KTt2LmNzcygiZGlzcGxheSIsIm5vbmUiKS5hcHBlbmQodCk7Zm9yKFAgaW4gUyl7U1tQXS5pbWc9SVtQXS5zcmM7Uih0LFNbUF0sMSl9dmFyIGg9KGQlYj09InVuZGVmaW5lZCI/MDpkJWIpO3N0YXJ0UmlnaHQ9MCxib3R0b21BZGRDb3VudD0yKmItaCxyaWdodEFkZENvdW50PU1hdGguY2VpbChkL2IpKzE7Zm9yKHZhciBQPTA7UDxib3R0b21BZGRDb3VudDtQKyspe1IodCx7aW1nOklbUCVJLmxlbmd0aF0uc3JjLHdpZHRoOnMsaGVpZ2h0OnoseDpzKigoaCtQKSViKSx5OnArTWF0aC5mbG9vcigoaCtQKS9iKSp6fSwxKX1mb3IodmFyIFA9MDtQPGJvdHRvbUFkZENvdW50O1ArKyl7Uih0LHtpbWc6SVtQJUkubGVuZ3RoXS5zcmMsd2lkdGg6cyxoZWlnaHQ6eix4OnMqYix5OlAqen0sMSl9fXZhciBHLFE7dGhpcy5nbz1mdW5jdGlvbih4LFUpe2lmKEcpe3JldHVybiAtMX1pZihyLmltYWdlcyl7U1t4XS5pbWc9SVt4XX1pZih3aW5kb3cuWE1MSHR0cFJlcXVlc3Qpe2lmKEUpe3ZhciBOPXIud2lkdGgsaj1yLmhlaWdodCxpPTE7QihVLFUsZmFsc2UpO0IoeCx4LGZhbHNlKTtpZihtKXtCKDIsdSsxLGZhbHNlKX1lbHNle0wud2lkdGg9TjtMLmhlaWdodD1qO0IoMix1KzEsdHJ1ZSxMLmN0eCxbVSx4XSl9aWYoIVEmJiFGKXtyYW5kPU1hdGgucm91bmQoSCgwLGQtMSxNYXRoLnJhbmRvbSgpKSk7ay53aWR0aD12LndpZHRoKCk7ay5oZWlnaHQ9di5oZWlnaHQoKTtRPUooeShJW3JhbmRdKSxlLGspfX1lbHNle3ZhciBOPUEud2lkdGgoKSxqPUEuaGVpZ2h0KCksaT1OL3Iud2lkdGh9Rz1uZXcgYyh4LFUsaSxOLGosZnVuY3Rpb24gVigpe2YudHJpZ2dlcigiZWZmZWN0RW5kIik7di5oaWRlKCk7Rz0wO2lmKCFtJiZFKXtmb3IoaSBpbiBTKXtTW2ldLmltZz1udWxsfX19KX1lbHNle0c9MDtDLnN0b3AodHJ1ZSkuYW5pbWF0ZSh7bGVmdDooeD8teCsiMDAlIjooL1NhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT8iMCUiOjApKX0sci5kdXJhdGlvbiwiZWFzZUluT3V0RXhwbyIsZnVuY3Rpb24oKXtmLnRyaWdnZXIoImVmZmVjdEVuZCIpfSl9fTtmdW5jdGlvbiBKKGkseCxqKXtpZihFKXtqLmN0eC5kcmF3SW1hZ2UoaS5nZXQoMCksMCwwKTtpZighbihqLmN0eCwwLDAsai53aWR0aCxqLmhlaWdodCx4KSl7ai5jdHguZHJhd0ltYWdlKGkuZ2V0KDApLDAsMCl9cmV0dXJuIHRydWV9cmV0dXJuIGNvbnR9dmFyIGc9WzUxMiw1MTIsNDU2LDUxMiwzMjgsNDU2LDMzNSw1MTIsNDA1LDMyOCwyNzEsNDU2LDM4OCwzMzUsMjkyLDUxMiw0NTQsNDA1LDM2NCwzMjgsMjk4LDI3MSw0OTYsNDU2LDQyMCwzODgsMzYwLDMzNSwzMTIsMjkyLDI3Myw1MTIsNDgyLDQ1NCw0MjgsNDA1LDM4MywzNjQsMzQ1LDMyOCwzMTIsMjk4LDI4NCwyNzEsMjU5LDQ5Niw0NzUsNDU2LDQzNyw0MjAsNDA0LDM4OCwzNzQsMzYwLDM0NywzMzUsMzIzLDMxMiwzMDIsMjkyLDI4MiwyNzMsMjY1LDUxMiw0OTcsNDgyLDQ2OCw0NTQsNDQxLDQyOCw0MTcsNDA1LDM5NCwzODMsMzczLDM2NCwzNTQsMzQ1LDMzNywzMjgsMzIwLDMxMiwzMDUsMjk4LDI5MSwyODQsMjc4LDI3MSwyNjUsMjU5LDUwNyw0OTYsNDg1LDQ3NSw0NjUsNDU2LDQ0Niw0MzcsNDI4LDQyMCw0MTIsNDA0LDM5NiwzODgsMzgxLDM3NCwzNjcsMzYwLDM1NCwzNDcsMzQxLDMzNSwzMjksMzIzLDMxOCwzMTIsMzA3LDMwMiwyOTcsMjkyLDI4NywyODIsMjc4LDI3MywyNjksMjY1LDI2MSw1MTIsNTA1LDQ5Nyw0ODksNDgyLDQ3NSw0NjgsNDYxLDQ1NCw0NDcsNDQxLDQzNSw0MjgsNDIyLDQxNyw0MTEsNDA1LDM5OSwzOTQsMzg5LDM4MywzNzgsMzczLDM2OCwzNjQsMzU5LDM1NCwzNTAsMzQ1LDM0MSwzMzcsMzMyLDMyOCwzMjQsMzIwLDMxNiwzMTIsMzA5LDMwNSwzMDEsMjk4LDI5NCwyOTEsMjg3LDI4NCwyODEsMjc4LDI3NCwyNzEsMjY4LDI2NSwyNjIsMjU5LDI1Nyw1MDcsNTAxLDQ5Niw0OTEsNDg1LDQ4MCw0NzUsNDcwLDQ2NSw0NjAsNDU2LDQ1MSw0NDYsNDQyLDQzNyw0MzMsNDI4LDQyNCw0MjAsNDE2LDQxMiw0MDgsNDA0LDQwMCwzOTYsMzkyLDM4OCwzODUsMzgxLDM3NywzNzQsMzcwLDM2NywzNjMsMzYwLDM1NywzNTQsMzUwLDM0NywzNDQsMzQxLDMzOCwzMzUsMzMyLDMyOSwzMjYsMzIzLDMyMCwzMTgsMzE1LDMxMiwzMTAsMzA3LDMwNCwzMDIsMjk5LDI5NywyOTQsMjkyLDI4OSwyODcsMjg1LDI4MiwyODAsMjc4LDI3NSwyNzMsMjcxLDI2OSwyNjcsMjY1LDI2MywyNjEsMjU5XTt2YXIgSz1bOSwxMSwxMiwxMywxMywxNCwxNCwxNSwxNSwxNSwxNSwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOCwxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwxOSwxOSwxOSwxOSwxOSwxOSwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMSwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMiwyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyMywyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNCwyNF07ZnVuY3Rpb24gbihhSSxhcCxhbixqLE4sYXope2lmKGlzTmFOKGF6KXx8YXo8MSl7cmV0dXJufWF6fD0wO3ZhciBhRDt0cnl7YUQ9YUkuZ2V0SW1hZ2VEYXRhKGFwLGFuLGosTil9Y2F0Y2goYUgpe2NvbnNvbGUubG9nKCJlcnJvcjp1bmFibGUgdG8gYWNjZXNzIGltYWdlIGRhdGE6ICIrYUgpO3JldHVybiBmYWxzZX12YXIgWD1hRC5kYXRhO3ZhciBheCxhdyxhRixhQyxhZSxhaCxhYixWLFcsYW0sYWMsYW8sYWssYXQsYXksYWYsYWEsYWcsYWksYXI7dmFyIGFHPWF6K2F6KzE7dmFyIGF1PWo8PDI7dmFyIGFkPWotMTt2YXIgYUI9Ti0xO3ZhciBaPWF6KzE7dmFyIGFBPVoqKForMSkvMjt2YXIgYXE9bmV3IFQoKTt2YXIgYWw9YXE7Zm9yKGFGPTE7YUY8YUc7YUYrKyl7YWw9YWwubmV4dD1uZXcgVCgpO2lmKGFGPT1aKXt2YXIgWT1hbH19YWwubmV4dD1hcTt2YXIgYUU9bnVsbDt2YXIgYXY9bnVsbDthYj1haD0wO3ZhciBhaj1nW2F6XTt2YXIgVT1LW2F6XTtmb3IoYXc9MDthdzxOO2F3Kyspe2F0PWF5PWFmPVY9Vz1hbT0wO2FjPVoqKGFhPVhbYWhdKTthbz1aKihhZz1YW2FoKzFdKTthaz1aKihhaT1YW2FoKzJdKTtWKz1hQSphYTtXKz1hQSphZzthbSs9YUEqYWk7YWw9YXE7Zm9yKGFGPTA7YUY8WjthRisrKXthbC5yPWFhO2FsLmc9YWc7YWwuYj1haTthbD1hbC5uZXh0fWZvcihhRj0xO2FGPFo7YUYrKyl7YUM9YWgrKChhZDxhRj9hZDphRik8PDIpO1YrPShhbC5yPShhYT1YW2FDXSkpKihhcj1aLWFGKTtXKz0oYWwuZz0oYWc9WFthQysxXSkpKmFyO2FtKz0oYWwuYj0oYWk9WFthQysyXSkpKmFyO2F0Kz1hYTtheSs9YWc7YWYrPWFpO2FsPWFsLm5leHR9YUU9YXE7YXY9WTtmb3IoYXg9MDtheDxqO2F4Kyspe1hbYWhdPShWKmFqKT4+VTtYW2FoKzFdPShXKmFqKT4+VTtYW2FoKzJdPShhbSphaik+PlU7Vi09YWM7Vy09YW87YW0tPWFrO2FjLT1hRS5yO2FvLT1hRS5nO2FrLT1hRS5iO2FDPShhYisoKGFDPWF4K2F6KzEpPGFkP2FDOmFkKSk8PDI7YXQrPShhRS5yPVhbYUNdKTtheSs9KGFFLmc9WFthQysxXSk7YWYrPShhRS5iPVhbYUMrMl0pO1YrPWF0O1crPWF5O2FtKz1hZjthRT1hRS5uZXh0O2FjKz0oYWE9YXYucik7YW8rPShhZz1hdi5nKTthays9KGFpPWF2LmIpO2F0LT1hYTtheS09YWc7YWYtPWFpO2F2PWF2Lm5leHQ7YWgrPTR9YWIrPWp9Zm9yKGF4PTA7YXg8ajtheCsrKXtheT1hZj1hdD1XPWFtPVY9MDthaD1heDw8MjthYz1aKihhYT1YW2FoXSk7YW89WiooYWc9WFthaCsxXSk7YWs9WiooYWk9WFthaCsyXSk7Vis9YUEqYWE7Vys9YUEqYWc7YW0rPWFBKmFpO2FsPWFxO2ZvcihhRj0wO2FGPFo7YUYrKyl7YWwucj1hYTthbC5nPWFnO2FsLmI9YWk7YWw9YWwubmV4dH1hZT1qO2ZvcihhRj0xO2FGPD1hejthRisrKXthaD0oYWUrYXgpPDwyO1YrPShhbC5yPShhYT1YW2FoXSkpKihhcj1aLWFGKTtXKz0oYWwuZz0oYWc9WFthaCsxXSkpKmFyO2FtKz0oYWwuYj0oYWk9WFthaCsyXSkpKmFyO2F0Kz1hYTtheSs9YWc7YWYrPWFpO2FsPWFsLm5leHQ7aWYoYUY8YUIpe2FlKz1qfX1haD1heDthRT1hcTthdj1ZO2Zvcihhdz0wO2F3PE47YXcrKyl7YUM9YWg8PDI7WFthQ109KFYqYWopPj5VO1hbYUMrMV09KFcqYWopPj5VO1hbYUMrMl09KGFtKmFqKT4+VTtWLT1hYztXLT1hbzthbS09YWs7YWMtPWFFLnI7YW8tPWFFLmc7YWstPWFFLmI7YUM9KGF4KygoKGFDPWF3K1opPGFCP2FDOmFCKSpqKSk8PDI7Vis9KGF0Kz0oYUUucj1YW2FDXSkpO1crPShheSs9KGFFLmc9WFthQysxXSkpO2FtKz0oYWYrPShhRS5iPVhbYUMrMl0pKTthRT1hRS5uZXh0O2FjKz0oYWE9YXYucik7YW8rPShhZz1hdi5nKTthays9KGFpPWF2LmIpO2F0LT1hYTtheS09YWc7YWYtPWFpO2F2PWF2Lm5leHQ7YWgrPWp9fWFJLnB1dEltYWdlRGF0YShhRCxhcCxhbik7cmV0dXJuIHRydWV9ZnVuY3Rpb24gVCgpe3RoaXMucj0wO3RoaXMuZz0wO3RoaXMuYj0wO3RoaXMuYT0wO3RoaXMubmV4dD1udWxsfX1qUXVlcnkuZXh0ZW5kKGpRdWVyeS5lYXNpbmcse2Vhc2VJbk91dFF1YWQ6ZnVuY3Rpb24oZSxmLGEsaCxnKXtpZigoZi89Zy8yKTwxKXtyZXR1cm4gaC8yKmYqZithfXJldHVybiAtaC8yKigoLS1mKSooZi0yKS0xKSthfX0pOy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIGh0dHA6Ly93b3dzbGlkZXIuY29tLwovLyBKYXZhU2NyaXB0IFdvdyBTbGlkZXIgaXMgYSBmcmVlIHNvZnR3YXJlIHRoYXQgaGVscHMgeW91IGVhc2lseSBnZW5lcmF0ZSBkZWxpY2lvdXMgCi8vIHNsaWRlc2hvd3Mgd2l0aCBnb3JnZW91cyB0cmFuc2l0aW9uIGVmZmVjdHMsIGluIGEgZmV3IGNsaWNrcyB3aXRob3V0IHdyaXRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLgovLyBHZW5lcmF0ZWQgYnkgV09XIFNsaWRlciA4LjcKLy8KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBPYmZ1c2NhdGVkIGJ5IEphdmFzY3JpcHQgT2JmdXNjYXRvcgovLyBodHRwOi8vamF2YXNjcmlwdC1zb3VyY2UuY29tCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZnVuY3Rpb24gd3Nfc2V2ZW4obSxBLG8pe3ZhciBwPWpRdWVyeTt2YXIgdz1wKHRoaXMpO3ZhciBuPW0uZGlzdGFuY2V8fDU7dmFyIGQ9bS5jb2xzO3ZhciB6PW0ucm93czt2YXIgYT1tLmR1cmF0aW9uKjI7dmFyIHE9bS5ibHVyfHw1MDt2YXIgRT1vLmZpbmQoIi53c19saXN0Iik7dmFyIHg9cCgiPGRpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSk7dmFyIGM9eC5jbG9uZSgpLmNzcygib3ZlcmZsb3ciLCJoaWRkZW4iKTt4LmFkZENsYXNzKCJ3c19lZmZlY3Qgd3Nfc2V2ZW4iKTt2YXIgdD0hbS5ub0NhbnZhcyYmIXdpbmRvdy5vcGVyYSYmISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0O3ZhciBsO3ZhciBlPXAoIjxkaXY+IikuYWRkQ2xhc3MoIndzX3BhcnRzIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGxlZnQ6MCx0b3A6MCx6SW5kZXg6OCx0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDAsMCwwKSJ9KTt2YXIgQj1wKCI8ZGl2PiIpLmFkZENsYXNzKCJ3c196b29tIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHRvcDowLGxlZnQ6MCx6SW5kZXg6Mix0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDAsMCwwKSJ9KTt4LmFwcGVuZChlLEIsYykuYXBwZW5kVG8obyk7dmFyIGY9e3Q6cCh3aW5kb3cpLnNjcm9sbFRvcCgpLGw6cCh3aW5kb3cpLnNjcm9sbExlZnQoKSx3OnAod2luZG93KS53aWR0aCgpLGg6cCh3aW5kb3cpLmhlaWdodCgpfTt2YXIgRD1NYXRoLm1heCgobS53aWR0aHx8ZS53aWR0aCgpKS8obS5oZWlnaHR8fGUuaGVpZ2h0KCkpfHwzLDMpO2Q9ZHx8TWF0aC5yb3VuZChEPDE/MzozKkQpO3o9enx8TWF0aC5yb3VuZChEPDE/My9EOjMpO3ZhciBKPVtdO3ZhciB5PVtdO2Zvcih2YXIgdj0wO3Y8ZCp6O3YrKyl7dmFyIEg9diVkO3ZhciBHPU1hdGguZmxvb3Iodi9kKTtwKEpbdl09cCgiPGRpdj4iKVswXSkuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLG92ZXJmbG93OiJoaWRkZW4iLHRyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwwLDApIn0pLmFwcGVuZFRvKGUpLmFwcGVuZChwKCI8aW1nPiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDAsMCwwKSJ9KSk7cCh5W3ZdPXAoIjxkaXY+IilbMF0pLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIix0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDAsMCwwKSJ9KS5hcHBlbmRUbyhCKS5hcHBlbmQocCgiPGltZz4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgwLDAsMCkifSkpfUo9cChKKTt5PXAoeSk7alF1ZXJ5LmV4dGVuZChqUXVlcnkuZWFzaW5nLHtlYXNlT3V0UXVhcnQ6ZnVuY3Rpb24oaixLLGksTSxMKXtyZXR1cm4gLU0qKChLPUsvTC0xKSpLKksqSy0xKStpfSxlYXNlSW5FeHBvOmZ1bmN0aW9uKGosSyxpLE0sTCl7cmV0dXJuKEs9PTApP2k6TSpNYXRoLnBvdygyLDEwKihLL0wtMSkpK2l9LGVhc2VJbkNpcmM6ZnVuY3Rpb24oaixLLGksTSxMKXtyZXR1cm4gLU0qKE1hdGguc3FydCgxLShLLz1MKSpLKS0xKStpfX0pO2Z1bmN0aW9uIHMoaixpKXtyZXR1cm4gTWF0aC5hYnMoKGklMj8xOjApKygoaS1pJTIpLzIpLWopL2l9ZnVuY3Rpb24gSShNLEwsTixpKXt2YXIgSz0oTD49aSk/KGkpLyhMKToxO3ZhciBqPShNPj1OKT8oTikvKE0pOjE7cmV0dXJue2w6aix0OkssbTpNYXRoLm1pbihqLEspfX1mdW5jdGlvbiBrKGosTCl7dmFyIEs9MDtmb3IodmFyIGkgaW4gail7KGZ1bmN0aW9uKE4sTyl7dmFyIE09T1tOXTt3b3dBbmltYXRlKE0uaXRlbSxNLmJlZ2luLE0uZW5kLE0uZHVyYXRpb24sTS5kZWxheSxNLmVhc2luZyxmdW5jdGlvbigpe2lmKE0uY2FsbGJhY2spe00uY2FsbGJhY2soKX1LKys7aWYoSz09Ty5sZW5ndGgmJkwpe0woKX19KX0oaSxqKSl9fWZ1bmN0aW9uIHUoVSxpLGosTSxXKXt2YXIgUT1lLndpZHRoKCksUz1lLmhlaWdodCgpLFQ9bipRL2QsTz1uKlMveixQPWEqKE0/NDo1KS8oZCp6KSxMPU0/ImVhc2VJbkV4cG8iOiJlYXNlT3V0UXVhcnQiO3ZhciBLPWYuaCtmLnQtUy96LFI9Zi53K2YubC1RL2QsWD1lLm9mZnNldCgpLnRvcCtlLmhlaWdodCgpLE49ZS5vZmZzZXQoKS5sZWZ0K2Uud2lkdGgoKTtpZihLPFgpe0s9WH1pZihSPE4pe1I9Tn12YXIgVj1bXTtwKFUpLmVhY2goZnVuY3Rpb24oYWYpe3ZhciBhYz1hZiVkLFo9TWF0aC5mbG9vcihhZi9kKSxhZD1hKjAuMioocyhhYyxkKSo0NStaKjQpLyhkKnopLGFiPWUub2Zmc2V0KCkubGVmdCtmLmwrVCphYy1RKm4vMitULGFlPWUub2Zmc2V0KCkudG9wK2YudCtPKlotUypuLzIrTyxZPUkoYWIsYWUsUixLKTtpZihtLnN1cHBvcnQudHJhbnNmb3JtKXt2YXIgYWc9e29wYWNpdHk6MSx0cmFuc2xhdGU6W1EqYWMvZCxTKloveiwwXSxzY2FsZToxLHdpZHRoOlEvZCxoZWlnaHQ6Uy96LHpJbmRleDpNYXRoLmNlaWwoMTAwLXMoYWMsZCkqMTAwKX0sYWo9e29wYWNpdHk6MCx0cmFuc2xhdGU6WyhUKmFjLVEqbi8yLjExNSkqWS5sLChPKlotUypuLzIuMTE1KSpZLnQsMF0sc2NhbGU6bipZLm0sd2lkdGg6US9kLGhlaWdodDpTL3osekluZGV4Ok1hdGguY2VpbCgxMDAtcyhhYyxkKSoxMDApfTtwKHRoaXMpLmZpbmQoImltZyIpLmNzcyh7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgiKygtUSphYy9kK2oubWFyZ2luTGVmdCkrInB4LCIrKC1TKloveitqLm1hcmdpblRvcCkrInB4LDBweCkiLHdpZHRoOmoud2lkdGgsaGVpZ2h0OmouaGVpZ2h0fSl9ZWxzZXt2YXIgYWc9e29wYWNpdHk6MSxsZWZ0OlEqYWMvZCx0b3A6UypaL3osd2lkdGg6US9kLGhlaWdodDpTL3osekluZGV4Ok1hdGguY2VpbCgxMDAtcyhhYyxkKSoxMDApfSxhaj17b3BhY2l0eTowLGxlZnQ6KFQqYWMtUSpuLzIpKlkubCx0b3A6KE8qWi1TKm4vMikqWS50LHdpZHRoOlQqWS5tLGhlaWdodDpPKlkubX0sYWk9e2xlZnQ6LShRKmFjL2QpK2oubWFyZ2luTGVmdCx0b3A6LShTKloveikrai5tYXJnaW5Ub3Asd2lkdGg6ai53aWR0aCxoZWlnaHQ6ai5oZWlnaHR9LGFoPXtsZWZ0Oi1uKihRL2QqYWMtai5tYXJnaW5MZWZ0KSpZLm0sdG9wOi1uKihTL3oqWi1qLm1hcmdpblRvcCkqWS5tLHdpZHRoOm4qai53aWR0aCpZLm0saGVpZ2h0Om4qai5oZWlnaHQqWS5tfX1pZighTSl7dmFyIGFhPWFnO2FnPWFqO2FqPWFhO2FhPWFpO2FpPWFoO2FoPWFhfVYucHVzaCh7aXRlbTpwKHRoaXMpLnNob3coKSxiZWdpbjphZyxlbmQ6YWosZWFzaW5nOkwsZGVsYXk6YWQsZHVyYXRpb246UCxjYWxsYmFjazpNP2Z1bmN0aW9uKCl7dGhpcy5pdGVtLmhpZGUoKX06MH0pO2lmKGFpKXtWLnB1c2goe2l0ZW06cCh0aGlzKS5maW5kKCJpbWciKSxiZWdpbjphaSxlbmQ6YWgsZWFzaW5nOkwsZGVsYXk6YWQsZHVyYXRpb246UH0pfX0pO2lmKE0pe3AoaSkuZWFjaChmdW5jdGlvbihhYyl7dmFyIFo9YWMlZDt2YXIgWT1NYXRoLmZsb29yKGFjL2QpO3ZhciBhYT1hKjAuMithKjAuMTUqKHMoWixkKSozNStZKjQpLyhkKnopO3ZhciBhYj1hKjQvKGQqeik7aWYobS5zdXBwb3J0LnRyYW5zZm9ybSl7dmFyIGFkPXtvcGFjaXR5OjAsdHJhbnNsYXRlOltRLzIsUy8yLDBdLHNjYWxlOjAsd2lkdGg6US9kLGhlaWdodDpTL3osekluZGV4Ok1hdGguY2VpbCgxMDAtcyhaLGQpKjEwMCl9LGFmPXtvcGFjaXR5OjEsdHJhbnNsYXRlOltRKlovZCxTKlkveiwwXSxzY2FsZToxLHdpZHRoOlEvZCxoZWlnaHQ6Uy96LHpJbmRleDpNYXRoLmNlaWwoMTAwLXMoWixkKSoxMDApfTtwKHRoaXMpLmZpbmQoImltZyIpLmNzcyh7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgiKygtUSpaL2Qrai5tYXJnaW5MZWZ0KSsicHgsIisoLVMqWS96K2oubWFyZ2luVG9wKSsicHgsMHB4KSIsd2lkdGg6ai53aWR0aCxoZWlnaHQ6ai5oZWlnaHR9KX1lbHNle3ZhciBhZD17bGVmdDpRLzIsdG9wOlMvMix3aWR0aDowLGhlaWdodDowLHpJbmRleDpNYXRoLmNlaWwoMTAwLXMoWixkKSoxMDApfSxhZj17bGVmdDpRKlovZCx0b3A6UypZL3osd2lkdGg6US9kLGhlaWdodDpTL3p9LGFnPXtsZWZ0OjAsdG9wOjAsd2lkdGg6MCxoZWlnaHQ6MH0sYWU9e2xlZnQ6LVEqWi9kK2oubWFyZ2luTGVmdCx0b3A6LVMqWS96K2oubWFyZ2luVG9wLHdpZHRoOmoud2lkdGgsaGVpZ2h0OmouaGVpZ2h0fX1WLnB1c2goe2l0ZW06cCh0aGlzKSxiZWdpbjphZCxlbmQ6YWYsZWFzaW5nOiJlYXNlT3V0QmFjayIsZGVsYXk6YWEsZHVyYXRpb246YWJ9KTtpZihhZyl7Vi5wdXNoKHtpdGVtOnAodGhpcykuZmluZCgiaW1nIiksYmVnaW46YWcsZW5kOmFlLGVhc2luZzoiZWFzZU91dEJhY2siLGRlbGF5OmFhLGR1cmF0aW9uOmFifSl9fSk7Qi5kZWxheShhKjAuMSkuYW5pbWF0ZSh7b3BhY2l0eToxfSxhKjAuMiwiZWFzZUluQ2lyYyIpfWsoVixXKTtyZXR1cm57c3RvcDpmdW5jdGlvbigpe1coKX19fXZhciBoO3RoaXMuZ289ZnVuY3Rpb24oaSxqLE0pe2lmKGgpe3JldHVybiBqfWlmKE09PXVuZGVmaW5lZCl7TT0oaj09MCYmaSE9aisxKXx8KGk9PWotMSk/ZmFsc2U6dHJ1ZX1mLnQ9cCh3aW5kb3cpLnNjcm9sbFRvcCgpO2YubD1wKHdpbmRvdykuc2Nyb2xsTGVmdCgpO2Yudz1wKHdpbmRvdykud2lkdGgoKTtmLmg9cCh3aW5kb3cpLmhlaWdodCgpO3ZhciBOPXAoQS5nZXQoaikpO049e3dpZHRoOk4ud2lkdGgoKSxoZWlnaHQ6Ti5oZWlnaHQoKSxtYXJnaW5Ub3A6cGFyc2VGbG9hdChOLmNzcygibWFyZ2luVG9wIikpLG1hcmdpbkxlZnQ6cGFyc2VGbG9hdChOLmNzcygibWFyZ2luTGVmdCIpKX07Si5maW5kKCJpbWciKS5hdHRyKCJzcmMiLEEuZ2V0KE0/ajppKS5zcmMpO3kuZmluZCgiaW1nIikuYXR0cigic3JjIixBLmdldChpKS5zcmMpO2Uuc2hvdygpO2lmKE0pe0Iuc2hvdygpfXZhciBMPTA7aWYoTSl7aWYodCl7dHJ5e2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpfWNhdGNoKEspe3Q9MH1sPSc8Y2FudmFzIHdpZHRoPSInK3gud2lkdGgrJyIgaGVpZ2h0PSInK3guaGVpZ2h0KyciLz4nO2w9cChsKS5jc3MoeyJ6LWluZGV4IjoxLHBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRvcDowfSkuY3NzKE4pLmFwcGVuZFRvKGMpO0w9RihwKEEuZ2V0KGopKSxOLHEsbC5nZXQoMCkpfWlmKCF0fHwhTCl7dD0wO0w9RihwKEEuZ2V0KGopKSxOLDgpO2lmKGwpe2wucmVtb3ZlKCk7bD0wfX19aD1uZXcgdShKLHksTixNLGZ1bmN0aW9uKCl7dy50cmlnZ2VyKCJlZmZlY3RFbmQiKTtlLmhpZGUoKTtCLmhpZGUoKTtpZihsKXtsLnJlbW92ZSgpfWVsc2V7aWYoTCl7TC5yZW1vdmUoKX19aD0wfSl9O2Z1bmN0aW9uIEYoUCxLLE8sTCl7dmFyIFM9KHBhcnNlSW50KFAucGFyZW50KCkuY3NzKCJ6LWluZGV4IikpfHwwKSsxO2lmKHQpe3ZhciBWPUwuZ2V0Q29udGV4dCgiMmQiKTtWLmRyYXdJbWFnZShQLmdldCgwKSwwLDAsSy53aWR0aCxLLmhlaWdodCk7aWYoIWIoViwwLDAsTC53aWR0aCxMLmhlaWdodCxPKSl7cmV0dXJuIDB9cmV0dXJuIHAoTCl9dmFyIFc9cCgiPGRpdj48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsInotaW5kZXgiOlMsbGVmdDowLHRvcDowLG92ZXJmbG93OiJoaWRkZW4ifSkuY3NzKEspLmFwcGVuZFRvKGMpO3ZhciBVPShNYXRoLnNxcnQoNSkrMSkvMjt2YXIgTT0xLVUvMjtmb3IodmFyIE49MDtNKk48TztOKyspe3ZhciBRPU1hdGguUEkqVSpOO3ZhciBqPShNKk4rMSk7dmFyIFQ9aipNYXRoLmNvcyhRKTt2YXIgUj1qKk1hdGguc2luKFEpO3AoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIikpLmF0dHIoInNyYyIsUC5hdHRyKCJzcmMiKSkuY3NzKHtvcGFjaXR5OjEvKE4vMS44KzEpLHBvc2l0aW9uOiJhYnNvbHV0ZSIsInotaW5kZXgiOlMsbGVmdDpNYXRoLnJvdW5kKFQpKyJweCIsdG9wOk1hdGgucm91bmQoUikrInB4Iix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0pLmFwcGVuZFRvKFcpfXJldHVybiBXfXZhciByPVs1MTIsNTEyLDQ1Niw1MTIsMzI4LDQ1NiwzMzUsNTEyLDQwNSwzMjgsMjcxLDQ1NiwzODgsMzM1LDI5Miw1MTIsNDU0LDQwNSwzNjQsMzI4LDI5OCwyNzEsNDk2LDQ1Niw0MjAsMzg4LDM2MCwzMzUsMzEyLDI5MiwyNzMsNTEyLDQ4Miw0NTQsNDI4LDQwNSwzODMsMzY0LDM0NSwzMjgsMzEyLDI5OCwyODQsMjcxLDI1OSw0OTYsNDc1LDQ1Niw0MzcsNDIwLDQwNCwzODgsMzc0LDM2MCwzNDcsMzM1LDMyMywzMTIsMzAyLDI5MiwyODIsMjczLDI2NSw1MTIsNDk3LDQ4Miw0NjgsNDU0LDQ0MSw0MjgsNDE3LDQwNSwzOTQsMzgzLDM3MywzNjQsMzU0LDM0NSwzMzcsMzI4LDMyMCwzMTIsMzA1LDI5OCwyOTEsMjg0LDI3OCwyNzEsMjY1LDI1OSw1MDcsNDk2LDQ4NSw0NzUsNDY1LDQ1Niw0NDYsNDM3LDQyOCw0MjAsNDEyLDQwNCwzOTYsMzg4LDM4MSwzNzQsMzY3LDM2MCwzNTQsMzQ3LDM0MSwzMzUsMzI5LDMyMywzMTgsMzEyLDMwNywzMDIsMjk3LDI5MiwyODcsMjgyLDI3OCwyNzMsMjY5LDI2NSwyNjEsNTEyLDUwNSw0OTcsNDg5LDQ4Miw0NzUsNDY4LDQ2MSw0NTQsNDQ3LDQ0MSw0MzUsNDI4LDQyMiw0MTcsNDExLDQwNSwzOTksMzk0LDM4OSwzODMsMzc4LDM3MywzNjgsMzY0LDM1OSwzNTQsMzUwLDM0NSwzNDEsMzM3LDMzMiwzMjgsMzI0LDMyMCwzMTYsMzEyLDMwOSwzMDUsMzAxLDI5OCwyOTQsMjkxLDI4NywyODQsMjgxLDI3OCwyNzQsMjcxLDI2OCwyNjUsMjYyLDI1OSwyNTcsNTA3LDUwMSw0OTYsNDkxLDQ4NSw0ODAsNDc1LDQ3MCw0NjUsNDYwLDQ1Niw0NTEsNDQ2LDQ0Miw0MzcsNDMzLDQyOCw0MjQsNDIwLDQxNiw0MTIsNDA4LDQwNCw0MDAsMzk2LDM5MiwzODgsMzg1LDM4MSwzNzcsMzc0LDM3MCwzNjcsMzYzLDM2MCwzNTcsMzU0LDM1MCwzNDcsMzQ0LDM0MSwzMzgsMzM1LDMzMiwzMjksMzI2LDMyMywzMjAsMzE4LDMxNSwzMTIsMzEwLDMwNywzMDQsMzAyLDI5OSwyOTcsMjk0LDI5MiwyODksMjg3LDI4NSwyODIsMjgwLDI3OCwyNzUsMjczLDI3MSwyNjksMjY3LDI2NSwyNjMsMjYxLDI1OV07dmFyIEM9WzksMTEsMTIsMTMsMTMsMTQsMTQsMTUsMTUsMTUsMTUsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjRdO2Z1bmN0aW9uIGIoYXosYWcsYWUsaixLLGFwKXtpZihpc05hTihhcCl8fGFwPDEpe3JldHVybn1hcHw9MDt2YXIgYXU7dHJ5e2F1PWF6LmdldEltYWdlRGF0YShhZyxhZSxqLEspfWNhdGNoKGF5KXtjb25zb2xlLmxvZygiZXJyb3I6dW5hYmxlIHRvIGFjY2VzcyBpbWFnZSBkYXRhOiAiK2F5KTtyZXR1cm4gZmFsc2V9dmFyIE89YXUuZGF0YTt2YXIgYW4sYW0sYXcsYXQsVixZLFMsTSxOLGFkLFQsYWYsYWIsYWosYW8sVyxSLFgsWixhaTt2YXIgYXg9YXArYXArMTt2YXIgYWs9ajw8Mjt2YXIgVT1qLTE7dmFyIGFyPUstMTt2YXIgUT1hcCsxO3ZhciBhcT1RKihRKzEpLzI7dmFyIGFoPW5ldyBnKCk7dmFyIGFjPWFoO2Zvcihhdz0xO2F3PGF4O2F3Kyspe2FjPWFjLm5leHQ9bmV3IGcoKTtpZihhdz09USl7dmFyIFA9YWN9fWFjLm5leHQ9YWg7dmFyIGF2PW51bGw7dmFyIGFsPW51bGw7Uz1ZPTA7dmFyIGFhPXJbYXBdO3ZhciBMPUNbYXBdO2ZvcihhbT0wO2FtPEs7YW0rKyl7YWo9YW89Vz1NPU49YWQ9MDtUPVEqKFI9T1tZXSk7YWY9USooWD1PW1krMV0pO2FiPVEqKFo9T1tZKzJdKTtNKz1hcSpSO04rPWFxKlg7YWQrPWFxKlo7YWM9YWg7Zm9yKGF3PTA7YXc8UTthdysrKXthYy5yPVI7YWMuZz1YO2FjLmI9WjthYz1hYy5uZXh0fWZvcihhdz0xO2F3PFE7YXcrKyl7YXQ9WSsoKFU8YXc/VTphdyk8PDIpO00rPShhYy5yPShSPU9bYXRdKSkqKGFpPVEtYXcpO04rPShhYy5nPShYPU9bYXQrMV0pKSphaTthZCs9KGFjLmI9KFo9T1thdCsyXSkpKmFpO2FqKz1SO2FvKz1YO1crPVo7YWM9YWMubmV4dH1hdj1haDthbD1QO2Zvcihhbj0wO2FuPGo7YW4rKyl7T1tZXT0oTSphYSk+Pkw7T1tZKzFdPShOKmFhKT4+TDtPW1krMl09KGFkKmFhKT4+TDtNLT1UO04tPWFmO2FkLT1hYjtULT1hdi5yO2FmLT1hdi5nO2FiLT1hdi5iO2F0PShTKygoYXQ9YW4rYXArMSk8VT9hdDpVKSk8PDI7YWorPShhdi5yPU9bYXRdKTthbys9KGF2Lmc9T1thdCsxXSk7Vys9KGF2LmI9T1thdCsyXSk7TSs9YWo7Tis9YW87YWQrPVc7YXY9YXYubmV4dDtUKz0oUj1hbC5yKTthZis9KFg9YWwuZyk7YWIrPShaPWFsLmIpO2FqLT1SO2FvLT1YO1ctPVo7YWw9YWwubmV4dDtZKz00fVMrPWp9Zm9yKGFuPTA7YW48ajthbisrKXthbz1XPWFqPU49YWQ9TT0wO1k9YW48PDI7VD1RKihSPU9bWV0pO2FmPVEqKFg9T1tZKzFdKTthYj1RKihaPU9bWSsyXSk7TSs9YXEqUjtOKz1hcSpYO2FkKz1hcSpaO2FjPWFoO2Zvcihhdz0wO2F3PFE7YXcrKyl7YWMucj1SO2FjLmc9WDthYy5iPVo7YWM9YWMubmV4dH1WPWo7Zm9yKGF3PTE7YXc8PWFwO2F3Kyspe1k9KFYrYW4pPDwyO00rPShhYy5yPShSPU9bWV0pKSooYWk9US1hdyk7Tis9KGFjLmc9KFg9T1tZKzFdKSkqYWk7YWQrPShhYy5iPShaPU9bWSsyXSkpKmFpO2FqKz1SO2FvKz1YO1crPVo7YWM9YWMubmV4dDtpZihhdzxhcil7Vis9an19WT1hbjthdj1haDthbD1QO2ZvcihhbT0wO2FtPEs7YW0rKyl7YXQ9WTw8MjtPW2F0XT0oTSphYSk+Pkw7T1thdCsxXT0oTiphYSk+Pkw7T1thdCsyXT0oYWQqYWEpPj5MO00tPVQ7Ti09YWY7YWQtPWFiO1QtPWF2LnI7YWYtPWF2Lmc7YWItPWF2LmI7YXQ9KGFuKygoKGF0PWFtK1EpPGFyP2F0OmFyKSpqKSk8PDI7TSs9KGFqKz0oYXYucj1PW2F0XSkpO04rPShhbys9KGF2Lmc9T1thdCsxXSkpO2FkKz0oVys9KGF2LmI9T1thdCsyXSkpO2F2PWF2Lm5leHQ7VCs9KFI9YWwucik7YWYrPShYPWFsLmcpO2FiKz0oWj1hbC5iKTthai09Ujthby09WDtXLT1aO2FsPWFsLm5leHQ7WSs9an19YXoucHV0SW1hZ2VEYXRhKGF1LGFnLGFlKTtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiBnKCl7dGhpcy5yPTA7dGhpcy5nPTA7dGhpcy5iPTA7dGhpcy5hPTA7dGhpcy5uZXh0PW51bGx9fTsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBodHRwOi8vd293c2xpZGVyLmNvbS8KLy8gSmF2YVNjcmlwdCBXb3cgU2xpZGVyIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IGhlbHBzIHlvdSBlYXNpbHkgZ2VuZXJhdGUgZGVsaWNpb3VzIAovLyBzbGlkZXNob3dzIHdpdGggZ29yZ2VvdXMgdHJhbnNpdGlvbiBlZmZlY3RzLCBpbiBhIGZldyBjbGlja3Mgd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS4KLy8gR2VuZXJhdGVkIGJ5IFdPVyBTbGlkZXIgOC43Ci8vCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gT2JmdXNjYXRlZCBieSBKYXZhc2NyaXB0IE9iZnVzY2F0b3IKLy8gaHR0cDovL2phdmFzY3JpcHQtc291cmNlLmNvbQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmZ1bmN0aW9uIHdzX2tlbmJ1cm5zKGQsbCxtKXt2YXIgZT1qUXVlcnk7dmFyIGc9ZSh0aGlzKTt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0O3ZhciBpPWUoIjxkaXY+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIn0pLmFkZENsYXNzKCJ3c19lZmZlY3Qgd3Nfa2VuYnVybnMiKS5hcHBlbmRUbyhtKTt2YXIgbz1kLnBhdGhzfHxbe2Zyb206WzAsMCwxXSx0bzpbMCwwLDEuMl19LHtmcm9tOlswLDAsMS4yXSx0bzpbMCwwLDFdfSx7ZnJvbTpbMSwwLDFdLHRvOlsxLDAsMS4yXX0se2Zyb206WzAsMSwxLjJdLHRvOlswLDEsMV19LHtmcm9tOlsxLDEsMV0sdG86WzEsMSwxLjJdfSx7ZnJvbTpbMC41LDEsMV0sdG86WzAuNSwxLDEuM119LHtmcm9tOlsxLDAuNSwxLjJdLHRvOlsxLDAuNSwxXX0se2Zyb206WzEsMC41LDFdLHRvOlsxLDAuNSwxLjJdfSx7ZnJvbTpbMCwwLjUsMS4yXSx0bzpbMCwwLjUsMV19LHtmcm9tOlsxLDAuNSwxLjJdLHRvOlsxLDAuNSwxXX0se2Zyb206WzAuNSwwLjUsMV0sdG86WzAuNSwwLjUsMS4yXX0se2Zyb206WzAuNSwwLjUsMS4zXSx0bzpbMC41LDAuNSwxXX0se2Zyb206WzAuNSwxLDFdLHRvOlswLjUsMCwxLjE1XX1dO2Z1bmN0aW9uIGMoaCl7cmV0dXJuIG9baD9NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGY/by5sZW5ndGg6TWF0aC5taW4oNSxvLmxlbmd0aCkpKTowXX12YXIgaz1kLndpZHRoLHA9ZC5oZWlnaHQ7dmFyIGosYjt2YXIgYSxyO2Z1bmN0aW9uIG4oKXthPWUoJzxkaXYgc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCUiPjwvZGl2PicpLmNzcyh7InotaW5kZXgiOjgscG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjB9KS5hcHBlbmRUbyhpKX1uKCk7ZnVuY3Rpb24gcyh3LHQsaCl7dmFyIHU9e3dpZHRoOjEwMCp3WzJdKyIlIn07dVt0PyJyaWdodCI6ImxlZnQiXT0tMTAwKih3WzJdLTEpKih0PygxLXdbMF0pOndbMF0pKyIlIjt1W2g/ImJvdHRvbSI6InRvcCJdPS0xMDAqKHdbMl0tMSkqKGg/KDEtd1sxXSk6d1sxXSkrIiUiO2lmKCFmKXtmb3IodmFyIHYgaW4gdSl7aWYoL1wlLy50ZXN0KHVbdl0pKXt1W3ZdPSgvcmlnaHR8bGVmdHx3aWR0aC8udGVzdCh2KT9rOnApKnBhcnNlRmxvYXQodVt2XSkvMTAwKyJweCJ9fX1yZXR1cm4gdX1mdW5jdGlvbiBxKHcseixBKXt2YXIgdD1lKHcpO3Q9e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKSxtYXJnaW5Ub3A6dC5jc3MoIm1hcmdpblRvcCIpLG1hcmdpbkxlZnQ6dC5jc3MoIm1hcmdpbkxlZnQiKX07aWYoZil7aWYoYil7Yi5zdG9wKDEpfWI9an1pZihyKXtyLnJlbW92ZSgpfXI9YTtuKCk7aWYoQSl7YS5oaWRlKCk7ci5zdG9wKHRydWUsdHJ1ZSl9aWYoZil7dmFyIHkseDt2YXIgdSxoO3U9ZSgnPGNhbnZhcyB3aWR0aD0iJytrKyciIGhlaWdodD0iJytwKyciLz4nKTt1LmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjB9KS5jc3ModCkuYXBwZW5kVG8oYSk7eT11LmdldCgwKS5nZXRDb250ZXh0KCIyZCIpO2g9dS5jbG9uZSgpLmFwcGVuZFRvKGEpO3g9aC5nZXQoMCkuZ2V0Q29udGV4dCgiMmQiKTtqPXdvd0FuaW1hdGUoZnVuY3Rpb24oQil7dmFyIEQ9W3ouZnJvbVswXSooMS1CKStCKnoudG9bMF0sei5mcm9tWzFdKigxLUIpK0Iqei50b1sxXSx6LmZyb21bMl0qKDEtQikrQip6LnRvWzJdXTt4LmRyYXdJbWFnZSh3LC1rKihEWzJdLTEpKkRbMF0sLXAqKERbMl0tMSkqRFsxXSxrKkRbMl0scCpEWzJdKTt5LmNsZWFyUmVjdCgwLDAsayxwKTt2YXIgQz15O3k9eDt4PUN9LDAsMSxkLmR1cmF0aW9uK2QuZGVsYXkqMil9ZWxzZXtrPXQud2lkdGg7cD10LmhlaWdodDt2YXIgdj1lKCc8aW1nIHNyYz0iJyt3LnNyYysnIi8+JykuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6ImF1dG8iLHJpZ2h0OiJhdXRvIix0b3A6ImF1dG8iLGJvdHRvbToiYXV0byJ9KS5hcHBlbmRUbyhhKS5jc3Mocyh6LmZyb20sei5mcm9tWzBdPjAuNSx6LmZyb21bMV0+MC41KSkuYW5pbWF0ZShzKHoudG8sei5mcm9tWzBdPjAuNSx6LmZyb21bMV0+MC41KSx7ZWFzaW5nOiJsaW5lYXIiLHF1ZXVlOmZhbHNlLGR1cmF0aW9uOigxLjUqZC5kdXJhdGlvbitkLmRlbGF5KX0pfWlmKEEpe2EuZmFkZUluKGQuZHVyYXRpb24pfX1pZihkLmVmZmVjdC5sZW5ndGg9PTEpe2UoZnVuY3Rpb24oKXtsLmVhY2goZnVuY3Rpb24oaCl7ZSh0aGlzKS5jc3Moe3Zpc2liaWxpdHk6ImhpZGRlbiJ9KTtpZihoPT1kLnN0YXJ0U2xpZGUpe3EodGhpcyxjKGgpLDApfX0pfSl9dGhpcy5nbz1mdW5jdGlvbihoLHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLnRyaWdnZXIoImVmZmVjdEVuZCIpfSxkLmR1cmF0aW9uKTtxKGwuZ2V0KGgpLGMoaCksMSl9fTsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBodHRwOi8vd293c2xpZGVyLmNvbS8KLy8gSmF2YVNjcmlwdCBXb3cgU2xpZGVyIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IGhlbHBzIHlvdSBlYXNpbHkgZ2VuZXJhdGUgZGVsaWNpb3VzIAovLyBzbGlkZXNob3dzIHdpdGggZ29yZ2VvdXMgdHJhbnNpdGlvbiBlZmZlY3RzLCBpbiBhIGZldyBjbGlja3Mgd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS4KLy8gR2VuZXJhdGVkIGJ5IFdPVyBTbGlkZXIgOC43Ci8vCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gT2JmdXNjYXRlZCBieSBKYXZhc2NyaXB0IE9iZnVzY2F0b3IKLy8gaHR0cDovL2phdmFzY3JpcHQtc291cmNlLmNvbQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmpRdWVyeS5leHRlbmQoalF1ZXJ5LmVhc2luZyx7ZWFzZUluT3V0U2luZTpmdW5jdGlvbihqLGksYixjLGQpe3JldHVybiAtYy8yKihNYXRoLmNvcyhNYXRoLlBJKmkvZCktMSkrYn19KTtmdW5jdGlvbiB3c19kb21pbm8obSxpLGspeyQ9alF1ZXJ5O3ZhciBoPSQodGhpcyk7dmFyIGM9bS5jb2x1bW5zfHw1LGw9bS5yb3dzfHwyLGQ9bS5jZW50ZXJSb3d8fDIsZz1tLmNlbnRlckNvbHVtbnx8Mjt2YXIgZj0kKCI8ZGl2PiIpLmFkZENsYXNzKCJ3c19lZmZlY3Qgd3NfZG9taW5vIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHRvcDowLG92ZXJmbG93OiJoaWRkZW4ifSkuYXBwZW5kVG8oayk7dmFyIGI9JCgiPGRpdj4iKS5hZGRDbGFzcygid3Nfem9vbSIpLmFwcGVuZFRvKGYpO3ZhciBqPSQoIjxkaXY+IikuYWRkQ2xhc3MoIndzX3BhcnRzIikuYXBwZW5kVG8oZik7dmFyIGU9ay5maW5kKCIud3NfbGlzdCIpO3ZhciBhO3RoaXMuZ289ZnVuY3Rpb24oeSx4KXtmdW5jdGlvbiB6KCl7ai5maW5kKCJpbWciKS5zdG9wKDEsMSk7ai5lbXB0eSgpO2IuZW1wdHkoKTthPTB9eigpO3ZhciBzPSQoaS5nZXQoeCkpO3M9e3dpZHRoOnMud2lkdGgoKSxoZWlnaHQ6cy5oZWlnaHQoKSxtYXJnaW5Ub3A6cGFyc2VGbG9hdChzLmNzcygibWFyZ2luVG9wIikpLG1hcmdpbkxlZnQ6cGFyc2VGbG9hdChzLmNzcygibWFyZ2luTGVmdCIpKX07dmFyIEQ9JChpLmdldCh4KSkuY2xvbmUoKS5hcHBlbmRUbyhiKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowfSkuY3NzKHMpO3ZhciBwPWYud2lkdGgoKTt2YXIgbz1mLmhlaWdodCgpO3ZhciB3PU1hdGguZmxvb3IocC9jKTt2YXIgdj1NYXRoLmZsb29yKG8vbCk7dmFyIHQ9cC13KihjLTEpO3ZhciBFPW8tdioobC0xKTtmdW5jdGlvbiBJKEwsSyl7cmV0dXJuIE1hdGgucmFuZG9tKCkqKEstTCsxKStMfWUuaGlkZSgpO3ZhciB1PVtdO2Zvcih2YXIgQz0wO0M8bDtDKyspe3VbQ109W107Zm9yKHZhciBCPTA7QjxjO0IrKyl7dmFyIHE9bS5kdXJhdGlvbiooMS1NYXRoLmFicygoZCpnLUMqQikvKDIqbCpjKSkpO3ZhciBGPUI8Yy0xP3c6dDt2YXIgbj1DPGwtMT92OkU7dVtDXVtCXT0kKCI8ZGl2PiIpLmNzcyh7d2lkdGg6RixoZWlnaHQ6bixwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDpDKnYsbGVmdDpCKncsb3ZlcmZsb3c6ImhpZGRlbiJ9KTt2YXIgSD1JKEMtMixDKzIpO3ZhciBHPUkoQi0yLEIrMik7dVtDXVtCXS5hcHBlbmRUbyhqKTt2YXIgSj0kKGkuZ2V0KHkpKS5jbG9uZSgpLmFwcGVuZFRvKHVbQ11bQl0pLmNzcyhzKTt2YXIgQT17dG9wOi1IKnYsbGVmdDotRyp3LG9wYWNpdHk6MH07dmFyIHI9e3RvcDotQyp2LGxlZnQ6LUIqdyxvcGFjaXR5OjF9O2lmKG0uc3VwcG9ydC50cmFuc2Zvcm0mJm0uc3VwcG9ydC50cmFuc2l0aW9uKXtBLnRyYW5zbGF0ZT1bQS5sZWZ0LEEudG9wLDBdO3IudHJhbnNsYXRlPVtyLmxlZnQsci50b3AsMF07ZGVsZXRlIEEudG9wO2RlbGV0ZSBBLmxlZnQ7ZGVsZXRlIHIudG9wO2RlbGV0ZSByLmxlZnR9d293QW5pbWF0ZShKLmNzcyh7cG9zaXRpb246ImFic29sdXRlIn0pLEEscixxLCJlYXNlSW5PdXRTaW5lIixmdW5jdGlvbigpe2ErKztpZihhPT1sKmMpe3ooKTtlLnN0b3AoMSwxKTtoLnRyaWdnZXIoImVmZmVjdEVuZCIpfX0pfX13b3dBbmltYXRlKEQse3NjYWxlOjF9LHtzY2FsZToxLjZ9LG0uZHVyYXRpb24sbS5kdXJhdGlvbiowLjIsImVhc2VJbk91dFNpbmUiKX19Oy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIGh0dHA6Ly93b3dzbGlkZXIuY29tLwovLyBKYXZhU2NyaXB0IFdvdyBTbGlkZXIgaXMgYSBmcmVlIHNvZnR3YXJlIHRoYXQgaGVscHMgeW91IGVhc2lseSBnZW5lcmF0ZSBkZWxpY2lvdXMgCi8vIHNsaWRlc2hvd3Mgd2l0aCBnb3JnZW91cyB0cmFuc2l0aW9uIGVmZmVjdHMsIGluIGEgZmV3IGNsaWNrcyB3aXRob3V0IHdyaXRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLgovLyBHZW5lcmF0ZWQgYnkgV09XIFNsaWRlciA4LjcKLy8KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBPYmZ1c2NhdGVkIGJ5IEphdmFzY3JpcHQgT2JmdXNjYXRvcgovLyBodHRwOi8vamF2YXNjcmlwdC1zb3VyY2UuY29tCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZnVuY3Rpb24gd3NfYmxhc3QocSxqLG0pe3ZhciBlPWpRdWVyeTt2YXIgaT1lKHRoaXMpO3ZhciBmPW0uZmluZCgiLndzX2xpc3QiKTt2YXIgYT1xLmRpc3RhbmNlfHwxO3ZhciBnPWUoIjxkaXY+IikuYWRkQ2xhc3MoIndzX2VmZmVjdCB3c19ibGFzdCIpO3ZhciBjPWUoIjxkaXY+IikuYWRkQ2xhc3MoIndzX3pvb20iKS5hcHBlbmRUbyhnKTt2YXIgaz1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ3c19wYXJ0cyIpLmFwcGVuZFRvKGcpO20uY3NzKHtvdmVyZmxvdzoidmlzaWJsZSJ9KS5hcHBlbmQoZyk7Zy5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRvcDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLCJ6LWluZGV4Ijo4fSk7dmFyIGQ9cS5jb2xzO3ZhciBwPXEucm93czt2YXIgbD1bXTt2YXIgYj1bXTtmdW5jdGlvbiBoKHUscixzLHQpe2lmKHEuc3VwcG9ydC50cmFuc2Zvcm0mJnEuc3VwcG9ydC50cmFuc2l0aW9uKXtpZih0eXBlb2Ygci5sZWZ0PT09Im51bWJlciJ8fHR5cGVvZiByLnRvcD09PSJudW1iZXIiKXtyLnRyYW5zZm9ybT0idHJhbnNsYXRlM2QoIisodHlwZW9mIHIubGVmdD09PSJudW1iZXIiP3IubGVmdDowKSsicHgsIisodHlwZW9mIHIudG9wPT09Im51bWJlciI/ci50b3A6MCkrInB4LDApIn1kZWxldGUgci5sZWZ0O2RlbGV0ZSByLnRvcDtpZihzKXtyLnRyYW5zaXRpb249ImFsbCAiK3MrIm1zIGVhc2UtaW4tb3V0In1lbHNle3IudHJhbnNpdGlvbj0iIn11LmNzcyhyKTtpZih0KXt1Lm9uKCJ0cmFuc2l0aW9uZW5kIHdlYmtpdFRyYW5zaXRpb25FbmQgb1RyYW5zaXRpb25FbmQgTVNUcmFuc2l0aW9uRW5kIixmdW5jdGlvbigpe3QoKTt1Lm9mZigidHJhbnNpdGlvbmVuZCB3ZWJraXRUcmFuc2l0aW9uRW5kIG9UcmFuc2l0aW9uRW5kIE1TVHJhbnNpdGlvbkVuZCIpfSl9fWVsc2V7ZGVsZXRlIHIudHJhbnNmcm9tO2RlbGV0ZSByLnRyYW5zaXRpb247aWYocyl7dS5hbmltYXRlKHIse3F1ZXVlOmZhbHNlLGR1cmF0aW9uOnEuZHVyYXRpb24sY29tcGxldGU6dD90OjB9KX1lbHNle3Uuc3RvcCgxKS5jc3Mocil9fX1mdW5jdGlvbiBuKHIpe3ZhciB3PU1hdGgubWF4KChxLndpZHRofHxnLndpZHRoKCkpLyhxLmhlaWdodHx8Zy5oZWlnaHQoKSl8fDMsMyk7ZD1kfHxNYXRoLnJvdW5kKHc8MT8zOjMqdyk7cD1wfHxNYXRoLnJvdW5kKHc8MT8zL3c6Myk7Zm9yKHZhciB1PTA7dTxkKnA7dSsrKXt2YXIgdj11JWQ7dmFyIHQ9TWF0aC5mbG9vcih1L2QpO2UoW2JbdV09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksbFt1XT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKV0pLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIn0pLmFwcGVuZFRvKGspLmFwcGVuZChlKCI8aW1nPiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIn0pKX1sPWUobCk7Yj1lKGIpO28obCxyKTtvKGIscix0cnVlKTt2YXIgcz17cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiJ9O2MuY3NzKHMpLmFwcGVuZChlKCI8aW1nPiIpLmNzcyhzKSl9ZnVuY3Rpb24gbyh0LHUscyxyLHcseil7dmFyIHY9Zy53aWR0aCgpO3ZhciB4PWcuaGVpZ2h0KCk7dmFyIHk9e2xlZnQ6ZSh3aW5kb3cpLnNjcm9sbExlZnQoKSx0b3A6ZSh3aW5kb3cpLnNjcm9sbFRvcCgpLHdpZHRoOmUod2luZG93KS53aWR0aCgpLGhlaWdodDplKHdpbmRvdykuaGVpZ2h0KCl9O2UodCkuZWFjaChmdW5jdGlvbihGKXt2YXIgRT1GJWQ7dmFyIEM9TWF0aC5mbG9vcihGL2QpO2lmKHMpe3ZhciBJPWEqdiooMipNYXRoLnJhbmRvbSgpLTEpK3YvMjt2YXIgRz1hKngqKDIqTWF0aC5yYW5kb20oKS0xKSt4LzI7dmFyIEg9Zy5vZmZzZXQoKTtILmxlZnQrPUk7SC50b3ArPUc7aWYoSC5sZWZ0PHkubGVmdCl7SS09SC5sZWZ0K3kubGVmdH1pZihILnRvcDx5LnRvcCl7Ry09SC50b3AreS50b3B9dmFyIEQ9KHkubGVmdCt5LndpZHRoKS1ILmxlZnQtdi9kO2lmKDA+RCl7SSs9RH12YXIgQj0oeS50b3AreS5oZWlnaHQpLUgudG9wLXgvcDtpZigwPkIpe0crPUJ9fWVsc2V7dmFyIEk9dipFL2Q7dmFyIEc9eCpDL3B9ZSh0aGlzKS5maW5kKCJpbWciKS5jc3Moe2xlZnQ6LSh2KkUvZCkrdS5tYXJnaW5MZWZ0LHRvcDotKHgqQy9wKSt1Lm1hcmdpblRvcCx3aWR0aDp1LndpZHRoLGhlaWdodDp1LmhlaWdodH0pO3ZhciBBPXtsZWZ0OkksdG9wOkcsd2lkdGg6di9kLGhlaWdodDp4L3B9O2lmKHcpe2UuZXh0ZW5kKEEsdyl9aWYocil7aChlKHRoaXMpLEEscS5kdXJhdGlvbiwoRj09PTAmJnopP3o6MCl9ZWxzZXtoKGUodGhpcyksQSl9fSl9dGhpcy5nbz1mdW5jdGlvbihzLHUpe3ZhciB2PWUoalt1XSkscj17d2lkdGg6di53aWR0aCgpLGhlaWdodDp2LmhlaWdodCgpLG1hcmdpblRvcDpwYXJzZUZsb2F0KHYuY3NzKCJtYXJnaW5Ub3AiKSksbWFyZ2luTGVmdDpwYXJzZUZsb2F0KHYuY3NzKCJtYXJnaW5MZWZ0IikpfTtpZighbC5sZW5ndGgpe24ocil9bC5maW5kKCJpbWciKS5hdHRyKCJzcmMiLGouZ2V0KHUpLnNyYyk7aChsLHtvcGFjaXR5OjEsekluZGV4OjN9KTtiLmZpbmQoImltZyIpLmF0dHIoInNyYyIsai5nZXQocykuc3JjKTtoKGIse29wYWNpdHk6MCx6SW5kZXg6Mn0pO2MuZmluZCgiaW1nIikuYXR0cigic3JjIixqLmdldCh1KS5zcmMpO2goYy5maW5kKCJpbWciKSx7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9KTtnLnNob3coKTtmLmhpZGUoKTtvKGIscixmYWxzZSx0cnVlLHtvcGFjaXR5OjF9KTtvKGwscix0cnVlLHRydWUse29wYWNpdHk6MH0sZnVuY3Rpb24oKXtpLnRyaWdnZXIoImVmZmVjdEVuZCIpO2cuaGlkZSgpfSk7aChjLmZpbmQoImltZyIpLHt0cmFuc2Zvcm06InNjYWxlKDIpIn0scS5kdXJhdGlvbiwwKTt2YXIgdD1iO2I9bDtsPXR9fTsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBodHRwOi8vd293c2xpZGVyLmNvbS8KLy8gSmF2YVNjcmlwdCBXb3cgU2xpZGVyIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IGhlbHBzIHlvdSBlYXNpbHkgZ2VuZXJhdGUgZGVsaWNpb3VzIAovLyBzbGlkZXNob3dzIHdpdGggZ29yZ2VvdXMgdHJhbnNpdGlvbiBlZmZlY3RzLCBpbiBhIGZldyBjbGlja3Mgd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS4KLy8gR2VuZXJhdGVkIGJ5IFdPVyBTbGlkZXIgOC43Ci8vCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gT2JmdXNjYXRlZCBieSBKYXZhc2NyaXB0IE9iZnVzY2F0b3IKLy8gaHR0cDovL2phdmFzY3JpcHQtc291cmNlLmNvbQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmZ1bmN0aW9uIHdzX2ZseShjLGEsYil7dmFyIGU9alF1ZXJ5O3ZhciBmPWUodGhpcyk7dmFyIGg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRvcDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHRyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwwLDApIn07dmFyIGQ9Yi5maW5kKCIud3NfbGlzdCIpO3ZhciBnPWUoIjxkaXY+IikuYWRkQ2xhc3MoIndzX2VmZmVjdCB3c19mbHkiKS5jc3MoaCkuY3NzKHtvdmVyZmxvdzoidmlzaWJsZSJ9KS5hcHBlbmRUbyhiKTt0aGlzLmdvPWZ1bmN0aW9uKHAsbSxsKXtpZihsPT11bmRlZmluZWQpe2w9ISFjLnJldmVyc31lbHNle2w9IWx9dmFyIGs9LShjLmRpc3RhbmNlfHxnLndpZHRoKCkvNCksbj1NYXRoLm1pbigtayxNYXRoLm1heCgwLGUod2luZG93KS53aWR0aCgpLWcub2Zmc2V0KCkubGVmdC1nLndpZHRoKCkpKSxpPShsP246aykscT0obD9rOm4pO3ZhciBqPWUoYS5nZXQobSkpO2o9e3dpZHRoOmoud2lkdGgoKSxoZWlnaHQ6ai5oZWlnaHQoKX07dmFyIHI9ZSgiPGRpdj4iKS5jc3MoaCkuY3NzKHsiei1pbmRleCI6MSxvdmVyZmxvdzoiaGlkZGVuIn0pLmh0bWwoZShhLmdldChtKSkuY2xvbmUoKS5jc3MoaikpLmFwcGVuZFRvKGcpO3ZhciBvPWUoIjxkaXY+IikuY3NzKGgpLmNzcyh7InotaW5kZXgiOjMsb3ZlcmZsb3c6ImhpZGRlbiJ9KS5odG1sKGUoYS5nZXQocCkpLmNsb25lKCkuY3NzKGopKS5hcHBlbmRUbyhnKS5zaG93KCk7d293QW5pbWF0ZShvLHtvcGFjaXR5OjB9LHtvcGFjaXR5OjF9LGMuZHVyYXRpb24pO3dvd0FuaW1hdGUobyx7bGVmdDppfSx7bGVmdDowfSwyKmMuZHVyYXRpb24vMyk7ZC5oaWRlKCk7d293QW5pbWF0ZShyLHtsZWZ0OjAsb3BhY2l0eToxfSx7bGVmdDpxLG9wYWNpdHk6MH0sMipjLmR1cmF0aW9uLzMsYy5kdXJhdGlvbi8zLGZ1bmN0aW9uKCl7ci5yZW1vdmUoKTtmLnRyaWdnZXIoImVmZmVjdEVuZCIpO28ucmVtb3ZlKCl9KX19Oy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIGh0dHA6Ly93b3dzbGlkZXIuY29tLwovLyBKYXZhU2NyaXB0IFdvdyBTbGlkZXIgaXMgYSBmcmVlIHNvZnR3YXJlIHRoYXQgaGVscHMgeW91IGVhc2lseSBnZW5lcmF0ZSBkZWxpY2lvdXMgCi8vIHNsaWRlc2hvd3Mgd2l0aCBnb3JnZW91cyB0cmFuc2l0aW9uIGVmZmVjdHMsIGluIGEgZmV3IGNsaWNrcyB3aXRob3V0IHdyaXRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLgovLyBHZW5lcmF0ZWQgYnkgV09XIFNsaWRlciA4LjcKLy8KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBPYmZ1c2NhdGVkIGJ5IEphdmFzY3JpcHQgT2JmdXNjYXRvcgovLyBodHRwOi8vamF2YXNjcmlwdC1zb3VyY2UuY29tCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiY29sbGFnZSxicmljayxmbHksbG91dmVycyxrZW5idXJucyIKalF1ZXJ5KCIjd293c2xpZGVyLWNvbnRhaW5lcjEiKS53b3dTbGlkZXIoe2VmZmVjdDoibG91dmVycyx0dixicmljayxjb2xsYWdlLHNldmVuLGtlbmJ1cm5zLGRvbWlubyxibGFzdCxmbHkiLHByZXY6IiIsbmV4dDoiIixkdXJhdGlvbjoyMCoxMDAsZGVsYXk6MjAqMTAwLHdpZHRoOjI4NTQsaGVpZ2h0OjIxNDAsYXV0b1BsYXk6dHJ1ZSxhdXRvUGxheVZpZGVvOmZhbHNlLHBsYXlQYXVzZTpmYWxzZSxzdG9wT25Ib3ZlcjpmYWxzZSxsb29wOmZhbHNlLGJ1bGxldHM6MSxjYXB0aW9uOnRydWUsY2FwdGlvbkVmZmVjdDoicGFyYWxsYXgiLGNvbnRyb2xzOnRydWUsY29udHJvbHNUaHVtYjpmYWxzZSxyZXNwb25zaXZlOjEsZnVsbFNjcmVlbjp0cnVlLGdlc3R1cmVzOjIsb25CZWZvcmVTdGVwOmZ1bmN0aW9uKGksYyl7cmV0dXJuIChpKzEgKyBNYXRoLmZsb29yKChjLTEpKk1hdGgucmFuZG9tKCkpKX0saW1hZ2VzOjB9KTs=
+
"></script>
+
                    </section>
+
 
         <script>
 
         <script>
 
             window_resize();
 
             window_resize();

Latest revision as of 18:32, 19 October 2016

Our projects
This summer, our team is aiming to engineer bacteria for supplement and absorption of autoinducer-2 in the natural environment. We mainly design two cell machines: AI-2 Supplier is the cell machine which can directly supply and enrich the AI-2 molecular level; AI-2 Consumer is another cell machine which can sense, absorb and degrade the AI-2 in the environment. By taking advantage of the special characteristics of AI-2 controllers, we hope to directly control the population behaviors of bacteria in group levels.
What's more, biosafety is further taken into account in our project. By applying gene circuits to control essential gene expression under the assigned biocontainment conditions, we can blocks essential gene expression to kill the cell upon loss of the biocontainment signal.
Our goals
AI-2 Supplier
To enrich the AI-2 concentration in the nature or artificial environment, we constructed two AI-2 Supplier Devices by overexpression of the components responsible for AI-2 production (luxS, mtn).
AI-2 Consumer
To 'quench' AI-2 signal in the nature or artificial environment, we constructed six AI-2 Consumer Devices by overexpression the components responsible for AI-2 uptake(lsrACDB), phosphorylation(lsrK) and degradation (lsrFG).
AI-2 Response Device
We successfully constructed two devices that could respond to AI-2 by producing GFP, to provide an independent means to use AI-2 Controller to alter heterologous gene expression. we show that a 1:1 mixture of AI-2 Response Device with AI-2 suppliers activated QS-activated GFP expression from the control group. And 1:1 mixture of AI-2 Response Device with AI-2 consumers could significantly depress QS-activated gene expression from the control cells.
Biosafety Considerations
This summer, we plan to mf-lon ssrA tag into 5 essential genes by using CRIPSR/Cas9 technology. By applying gene circuits to control mf-lon protease expression under the assigned biocontainment conditions, we can blocks essential gene expression to kill the cell upon loss of the biocontainment signal.
Demonstration of Experiment Results
We demonstrate utility of AI-2 Controllers by modulating naturally occurring processes of biofilm formation. We envision that ‘controller cells’ that modulate bacterial behavior by manipulating molecular communication, will find use in a variety of applications, particularly those employing natural or synthetic bacterial consortia.
AI-2 Controllers Characterization
AI-2 Controllers & AI-2 Response Devices
AI-2 Controllers & Biofilm Formation
HUMAN PRACTICE
This is the outline of our human practice.